Path: csiph.com!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail From: Bruce Horrocks <07.013@scorecrow.com> Newsgroups: alt.comp.lang.awk,comp.lang.awk Subject: Re: printing words without newlines? Date: Sun, 12 May 2024 09:52:51 +0100 Lines: 50 Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Trace: individual.net 7ZtMdNQRJovVo5ny6k2H8At5yB19aN7do6Eks3MBz/5ywIyQoX Cancel-Lock: sha1:BLcI4ks489ShB9fmBbQu/5jhqiY= sha256:tmG20+BsEf+1uT8Sitmd452NSzhShow/PidS5IbnH+E= User-Agent: Mozilla Thunderbird Content-Language: en-GB In-Reply-To: Xref: csiph.com alt.comp.lang.awk:3 comp.lang.awk:9726 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 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 for an example - just replace the "\n\n" in the example with " " to see the effect you are looking for. -- Bruce Horrocks Surrey, England