在Linux中排序2列

时间:2015-02-09 05:21:21

标签: linux sorting

我的输入文件如下。

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

我希望我的输出如下所示。请帮我在linux中使用SORT命令。

感谢。

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

首先对第二列进行排序,然后排列第一列。

1 个答案:

答案 0 :(得分: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仅使用&#34; didExist&#34打印每个键的第一个;关联数组ex[]以丢弃后续数组。这会按顺序为您提供密钥B,D,C,A

然后,对于该顺序中的每个键,它将从该键的输入文件中提取所有数据,并根据递减值对这些数据进行排序

最终结果是通过减少最高值以及每个键集中的行减少值来对键集进行排序:

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