我有一个这样的文本文件:
word_1 23.66 word_5 0 word_7 123
word_5 6 word_1 2 word_7 12
word_7 23.7 word_2 21 word_1 3
...
最好使用awk,如何按“word_1”后的数字对行进行排序?
答案 0 :(得分:1)
我可以给你一些由sed
和sort
组成的命令序列:
sed -r 's/(.*)(word_1 )([^ ]+)(.*)/\3\t&/' your_file | sort -n | sed -r 's/[^\t]+\t(.*)/\1/'
word_1
之后添加一个数字,并在行答案 1 :(得分:1)
GNU awk支持根据索引或值对数组进行排序,请参阅联机帮助页中的PROCINFO["sorted_in"]
。
要实现您的目标,请执行以下操作:
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] }
像这样运行:
awk -f sort.awk infile
输出:
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