Re: printing words without newlines?

Liste des GroupesRevenir à cl awk 
Sujet : Re: printing words without newlines?
De : dchmelik (at) *nospam* gmail.com (David Chmelik)
Groupes : alt.comp.lang.awk comp.lang.awk
Date : 13. May 2024, 03:13:28
Autres entêtes
Organisation : A noiseless patient Spider
Message-ID : <v1rt08$37eqd$2@dont-email.me>
References : 1
User-Agent : Pan/0.158 (Avdiivka; 6a11104e)
On Sun, 12 May 2024 18:22:05 -0000 (UTC), jeojet wrote:

<snip>
I'm learning more AWK basics and wrote function to read file, sort,
print.  I use GNU AWK (gawk) and its sort but printing is harder to get
working than anything... separate lines work, but when I use printf() or
set ORS then use print (for words one line) all awk outputs (on FreeBSD
UNIX 14 and Slackware GNU/Linux 15) is a space (and not even newline
before shell prompt)... is this normal (and I made mistake?) or am I
approaching it wrong?  I recall BASIC prints new lines, but as I learned
basic C and some derivatives, I'm used to newlines only being
specified...
------------------------------------------------------------------------
# print_file_words.awk # pass filename to function BEGIN {
print_file_words("data.txt"); }
>
# read two-column array from file and sort lines and print function
print_file_words(file) {
# set record separator then use print # ORS=" "
 while(getline<file) arr[$1]=$0 PROCINFO["sorted_in"]="@ind_num_asc"
 for(i in arr)
 {
   split(arr[i],arr2)
   # output all words or on one line with ORS print arr2[2]
   # output all words on one line without needing ORS #printf("%s
   ",arr2[2])
 }
}
<snip>
 
I think you forgot that arr2 is now an array => you have to iterate over
it as well.  There were also a few other coding errors, ie. not closing
the data.txt file; not declaring local vars in print_file_words:
 
--
$ cat test.awk BEGIN { print_file_words("data.txt") }
 
function print_file_words(file,  i,j) {
  ORS = " " PROCINFO["sorted_in"]="@ind_num_asc"
  while (getline <file >0)
    arr[$1] = $0
  close (file)
 
  for(i in arr) {
    split(arr[i],arr2)
for (j in arr2)
      print arr2[j]
  }
  ORS = "\n"
  print ""
}
 
$ gawk -f test.awk all are base belong to us your

My original works after rebooting after discussion in main thread (without
'Re') but thanks for instruction to close file, though I don't know you
need to pass in i--not used outside.  It's odd iterating over arr2 even
still prints all words (wrong order) because the way I used arr2 it only
ever had one number and one word--its point was to split out & get word,
then for the next i, it's split again onto arr2 which is erased/updated.

Date Sujet#  Auteur
12 May 24 * Re: printing words without newlines?3jeojet
13 May 24 +- Re: printing words without newlines?1David Chmelik
13 May 24 `- Re: printing words without newlines?1David Chmelik

Haut de la page

Les messages affichés proviennent d'usenet.

NewsPortal