我在RedHat Enterprise Linux 5 x86_64和Ubuntu 9.1中看到了'sort'的奇怪之处。我正在使用bash。
首先,我认为使用字典顺序排序是正确的:
[stauffer @ unix-m sortTrouble] $ cat st1
1230
123个
100个
11个
10个
1
123个
1230
100
[stauffer @ unix-m sortTrouble] $ sort st1
1
10个
100个
100个
11个
123个
123个
1230
1230
[stauffer @ unix-m sortTrouble] $
现在,当有第二列(制表符分隔,即使它在这里看起来很混乱)时会发生什么:
[stauffer @ unix-m sortTrouble] $ cat st2
1230 1
123 1
100 1
11 1
10 1
1 1
123 1
1230 1
100 1
[stauffer @ unix-m sortTrouble] $ sort st2
100 1
100 1
10 1
1 1
11 1
1230 1
1230 1
123 1
123 1
注意第1列的排序顺序现在有所不同。 “11”在“1”之后正确放置,但“10”和“100”没有。同样的'1230'。似乎零会导致麻烦。
此行为不一致,并且在使用“join”时会导致问题,因为它需要字典排序。
在Mac OSX 10.5上,st2文件在第一列中排序为st1。
我错过了什么,或者这是一个错误?
谢谢, 迈克尔
答案 0 :(得分:8)
来自手册页
-b, --ignore-leading-blanks
ignore leading blanks
-g, --general-numeric-sort
compare according to general numerical value
-n, --numeric-sort
compare according to string numerical value
例如:
andrey@localhost:~/gamess$ echo -e "1\n2\n10" | sort
1
10
2
andrey@localhost:~/gamess$ echo -e "1\n2\n10" | sort -g
1
2
10
答案 1 :(得分:4)
通过将密钥限制为您感兴趣的列,可以按照您希望的方式执行排序:
sort -k1,1 inputfile