GNU awk unterstützt das Sortieren von Arrays basierend auf Index oder Wert, siehe PROCINFO["sorted_in"]
in der Manpage.
Um das zu erreichen, was Sie wollen, tun Sie etwas wie folgt aus:
sort.awk
# Sort the indices numerically descending
BEGIN { PROCINFO["sorted_in"] = "@ind_num_desc" }
# Use the number following "word_1" as the index in the h hash
{
for (i=1; i<=NF; i++)
if($i == "word_1")
h[$(i+1),NR] = $0
}
END { for(k in h) print h[k] }
Run es wie folgt aus:
awk -f sort.awk infile
Ausgang:
word_1 23.66 word_5 0 word_7 123
word_7 23.7 word_2 21 word_1 3
word_5 6 word_1 2 word_7 12
Dies überschreibt Datensätze, falls Sie mehr als einen Datensatz mit dem gleichen Wert haben. Eine Möglichkeit, dies zu bewerkstelligen, ist das Hinzufügen der Zeilennummer zum Schlüssel, d. H '[$ (i + 1), NR] = $ 0' – karakfa
Schön. Ich wusste nichts über PROCINFO. –
@karakfa: guter Punkt, ich werde das hinzufügen – Thor