Liste des Groupes | Revenir à cl awk |
I'm learning more AWK basics and wrote function to read file, sort,Your input file probably has DOS line endings, see https://stackoverflow.com/questions/45772525/why-does-my-tool-output-overwrite-itself-and-how-do-i-fix-it for what that means and how to deal with them but basically either run `dos2unix` on your file before calling awk or add `sub(\r$/,"")` as I show below*.
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)...
approaching it wrong? I recall BASIC prints new lines, but as I learnedMove the above to a BEGIN section so it is executed once total instead of once per input line.
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]=$0The above would spin off into an infinite loop if getline failed since in that case it'd return a negative number which would still evaluate to "true" when tested as a condition. It needs to be:
PROCINFO["sorted_in"]="@ind_num_asc"Add `print RS` after the loop if you had set ORS to a blank so the output ends in a newline and therefore is a valid POSIX text file, otherwise YMMV with what subsequent text processing tools can do with it.
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
Les messages affichés proviennent d'usenet.