如何使用AWK对第一列的值进行排序并仅打印第三列的相应值



我尝试使用awk '{print $0|"sort -t',' -nk1 "}'对文件进行排序,但我只想打印排序文件的第三列。输入文件: 1 4 7 9 9 7 4 1 4 6 8 9 1 2 3 4 5 4 5 2 预期输出: 3 7 8 5 4

试试这个 -

sort file|awk '{print $3}'
3
7
8
5
4

两种简单的方法">只打印排序文件的第三":

使用tr+cut命令:

sort -n file | tr -s ' ' | cut -d' ' -f3

awk

sort -n file | awk '{print $3}'

好吧,因为我已经开始使用 Gnu awk 的asorti来做这件事:

$ awk '
{ a[$1 "," $3]=$3 }      # get the data to a hash (*)
END { n=asorti(a)            # sort a by the index
for(i=1;i<=n;i++) {    # for each ordered index
split(a[i],b,",")  # split and
print b[2]         # print the latter part
}
}' file
3
7
8
5
4

(*)如果仅使用$1作为密钥,则$1=1时会发生冲突。对于此数据,使用$1 "," $3不会产生冲突,并且也会对$3进行排序。但是,可能会发生碰撞。正确的方法是保留键的计数,并有一个子for循环来打印出这些键(或者将键和值放在不同的数组中,用NR索引)。这将作为锻炼。

最新更新