Re: printing words without newlines?

Bruce Horrocks <[email protected]> Sun, 12 May 2024 09:52:51 +0100
Newsgroups alt.comp.lang.awk,comp.lang.awk
Message-ID <[email protected]>
On 12/05/2024 05:57, David Chmelik wrote:
> 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])
>    }
> }
> ------------------------------------------------------------------------
> # sample data.txt
> 2 your
> 1 all
> 3 base
> 5 belong
> 4 are
> 7 us
> 6 to

You need to set ORS in the BEGIN { } section (or on the command line).

See 
<https://www.gnu.org/software/gawk/manual/html_node/Output-Separators.html> 
for an example - just replace the "\n\n" in the example with " " to see 
the effect you are looking for.

-- 
Bruce Horrocks
Surrey, England