【发布时间】:2018-10-26 01:48:01
【问题描述】:
如果数据如下:
a,b,3
c,d,e,f,2
g,1
我想按最后一列排序。结果应该是:
g,1
c,d,e,f,2
a,b,3
【问题讨论】:
-
或者还有其他方法吗?
-
将它传递给另一个命令(如
awk),将最后一列复制到前面,将其传递给sort,然后将其传递给另一个删除第一列的命令。
如果数据如下:
a,b,3
c,d,e,f,2
g,1
我想按最后一列排序。结果应该是:
g,1
c,d,e,f,2
a,b,3
【问题讨论】:
awk),将最后一列复制到前面,将其传递给sort,然后将其传递给另一个删除第一列的命令。
如果最后一个字段是个位数
$ rev file | sort | rev
您可能需要添加 -t, -n 以进行数字排序,但单个数字无关紧要。
或者,对于awk的一般情况
$ awk -F, '{a[$NF]=$0} END{n=asorti(a,d); for(k=1;k<=n;k++) print a[d[k]]}' file
g,1
c,d,e,f,2
a,b,3
如果最后一个字段不是唯一的,这将失败。使用 decorate/sort/undecorate 成语,您可以改写(就像您自己发现的那样)
$ awk -F, '{print $NF FS $0}' file | sort -n | cut -d, -f2-
在键和记录之间使用字段分隔符会更安全,因为您要确保 FS 不会出现在键本身中。
【讨论】:
我有一个愚蠢但简单的方法:)
//如果文件中有原始数据:~/Desktop/1.log
$ awk -F, '{print $NF, $0}' ~/Desktop/1.log |排序-n | awk '{print $2}'
g,1
c,d,e,f,2
a,b,3
【讨论】: