文本:
12 34 56
78 90 12
23 45 89
要求对最后一个域进行排序:
awk '{a[$NF]=$0}END{l=asorti(a,b);for (i=1;i<=l;i++) print i"\t"b[i]"\t"a[b[i]]}' file
1
2
3
[解析]
END,在最后执行命令,asorti对数组a的下标进行排序,并把排序后的下标存入新生成的数组b中,并把数组a的长度赋值给变量l。然后必须用for循环取出数组的下标,因为数组是无法直接print打印的,这时候打印输出变量i,排序后的数字b的下标的值,然后把该下标在数组a中的赋值打印出来。
内置函数asort只对值进行排序,会丢掉原来的数组值。
awk '{a[$1]}END{print asorti(a)}' file
统计下标的数量,并打印。
评论