48
48
如何在UNIX中只用一列进行排序?
我知道Unix sort 的-k选项允许我们通过特定的列和以下所有进行排序。例如,给定输入文件
2 3
2 2
1 2
2 1
1 1
使用sort -n -k 1
,我得到了一个按第1列和第2列排序的输出:
1 1
1 2
2 1
2 2
2 3
然而,我想保持第2列的排序,像这样:
1 2
1 1
2 3
2 2
2 1
使用sort
命令可以吗?
为了只对第一列进行排序,你应该这样做。
sort -n -s -k1,1
From Unix and Linux System Administration Handbook
sort接受键规范-k3(而不是-k3,3),但它可能没有达到你的预期。如果没有终止字段号,排序键就会一直持续到行的末尾。
提供的答案对我来说一般都不适用。
sort -s -k 2 file1
和sort -n -k1,1
都对这个文件做了额外的排序。
# cat file1
3 3 5
3 2 3
1 4 7
0 1 2
3 2 1
我就是要做这个事情,最后用了一个shell循环。这个解决方案在一个非常大的文件上可能不会有很好的效果,因为需要读取整个文件中排序列中的每个唯一值。
这里的文件只在第2列上进行排序。
# awk '{print $2}' file1 | sort | uniq | while read index
do
awk -v var=$index '$2 == var { print $0}' file1
done
0 1 2
3 2 3
3 2 1
3 3 5
1 4 7
``` 这里文件只在第2列进行排序。