Re: printing words without newlines?
David Chmelik <[email protected]> Mon, 13 May 2024 01:09:28 -0000 (UTC)
| Newsgroups | alt.comp.lang.awk,comp.lang.awk |
|---|---|
| Organization | A noiseless patient Spider |
| Message-ID | <[email protected]> |
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:
The split() sets arr[2] equal to arr[i] current word (second column) so
the for() already iterates to update arr2 (it only ever is a two-element
array with a number (not printed) then word) and prints each word fine on
new lines when not trying to print them on one line. The only problem is
something went wrong with printf or ORS & print.