2

我有一个包含两列的文件。第一列中有两个下划线分隔的数字,我想按此列按字典顺序对文件进行排序。现在,如果没有第二列,默认排序正是我想要的:

$ { echo 211_284; for ((i=2840;i<=2842;++i)); do echo 211_$i; done; echo 211_284; } | sort -k1
211_284
211_284
211_2840
211_2841
211_2842

但是如果我添加第二列(这应该与排序无关!):

$ { echo 211_284 X; for ((i=2840;i<=2842;++i)); do echo 211_$i Y; done; echo 211_284 Z; } | sort -k1
211_2840 Y
211_2841 Y
211_2842 Y
211_284 X
211_284 Z

甚至在其中一行中添加第二列:

$ { echo 211_284 X; for ((i=2840;i<=2842;++i)); do echo 211_$i; done; echo 211_284; } | sort -k1
211_284
211_2840
211_2841
211_2842
211_284 X

我如何对第一列进行排序,真的吗?

4

1 回答 1

2

如果您想忽略第一列以外的任何内容,请使用sort -k1,1; 否则,您指定的是开始列而不是结束列:

此外,如果您不希望您的语言环境的排序规则影响数字和空格之间的字典排序关系,请LC_ALL=C显式设置(或者,更严格地说,LC_COLLATE=C)。

$ { echo 211_284 X; for ((i=2840;i<=2842;++i)); do echo 211_$i Y; done; echo 211_284 Z; } \
>   | LC_ALL=C sort -k1,1
211_284 X
211_284 Z
211_2840 Y
211_2841 Y
211_2842 Y
于 2015-10-27T15:45:25.843 回答