2015-02-09 90 views
-1

我的输入文件如下。在Linux中排序2列

A 0
A 2
的C 2
乙11
的C 5
d 7
乙3

我希望我的输出成为像以下。请在Linux中使用SORT命令来帮助我。

谢谢。

乙11
乙3
d 7
的C 5
的C 2
A 2
A 0

第二列首先被排序,然后第一列被布置。

+0

'sort'是可怕的任意订单。 – 2015-02-09 05:23:58

+0

你应该编写自己的排序。标准的“排序”对定制标准没有多大帮助。在'python','js'或任何您熟悉的脚本语言中,这应该很容易 – slezica 2015-02-09 05:48:52

回答

2

这是可以做到,但它不漂亮:

for key in $(sort -n -k2 -r <inFile | awk 'ex[$1]==0{print $1;ex[$1]=1}'); do 
    awk -vK=$key '$1==K{print}' <inFile | sort -r -n -k2 
done 

这就是for环路内使用会减少值的顺序返回键(字母)的列表的命令,并与重复删除。 sort部分确保所有行都处于缩减值顺序(数字,键位2,反向顺序),而awk仅使用“doesExist”关联数组ex[]来打印每个键的第一个以丢弃后续的键。这将为您提供按顺序键B,D,C,A

然后,对于每个以该顺序这些键,它会提取所有从输入文件数据该键,和排序基于所述递减值的那些。

最终的结果是关键集的通过减少最高值和分选内的行,每行键设置通过减少值:

B 11 
B 3 
D 7 
C 5 
C 2 
A 2 
A 0