【问题标题】:shell sort command : How to sort by the last column (the number of columns is uncertain)?shell sort 命令:如何按最后一列排序(列数不定)?
【发布时间】: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,然后将其传递给另一个删除第一列的命令。

标签: bash shell sorting


【解决方案1】:

如果最后一个字段是个位数

$ 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 不会出现在键本身中。

【讨论】:

  • 但是,如果有重复的数字,结果似乎是不正确的。
【解决方案2】:

我有一个愚蠢但简单的方法:)

//如果文件中有原始数据:~/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

【讨论】:

    猜你喜欢
    • 2020-09-28
    • 1970-01-01
    • 2012-09-13
    • 1970-01-01
    • 2021-11-21
    • 2015-10-25
    • 2020-07-21
    • 1970-01-01
    • 2010-12-14
    相关资源
    最近更新 更多