Unix排序问题

时间:2015-08-05 11:31:36

标签: sorting unix

当分隔符为逗号时,有人可以解释为什么UNIX排序输出不同,''和管道' |'

我知道我在字母数字列上应用了数字排序,但我认为当分隔符是逗号或管道时输出不应该不同。

带逗号分隔符的文件:

$cat file.txt
1,1400002827,002,DC19183529
2,1400002827,002,DC19183500
3,1400004243,001,DC17458621
4,1400008953,004,1459345892
5,1600009991,001,DC17458621
6,1600009991,001,DC17458621
7,1600009991,001,DC17458659
8,1600009991,003,DC17458789

$sort -t, -nuk2,4 file.txt 
1,1400002827,002,DC19183529
3,1400004243,001,DC17458621
5,1600009991,001,DC17458621
8,1600009991,003,DC17458789
4,1400008953,004,1459345892

修改了相同的文件,将分隔符作为管道' |'

$cat file.txt
1|1400002827|002|DC19183529
2|1400002827|002|DC19183500
3|1400004243|001|DC17458621
4|1400008953|004|1459345892
5|1600009991|001|DC17458621
6|1600009991|001|DC17458621
7|1600009991|001|DC17458659
8|1600009991|003|DC17458789

$sort -t'|' -nuk2,4 file.txt
1|1400002827|002|DC19183529
3|1400004243|001|DC17458621
4|1400008953|004|1459345892
5|1600009991|001|DC17458621

我不需要替代解决方案 我需要理解为什么sort使用逗号和管道给出不同的输出。

1 个答案:

答案 0 :(得分:1)

好像这个问题有shown up before

由于sort选项,

-n将逗号视为千位分隔符。这就是为什么你的逗号结果与其他分隔符的结果不匹配的原因。显然,.也会发生这种情况。如果您需要字母数字排序并删除-n选项,则|,的结果相同。

sort -t'|' -uk2,2 pipes.txt 
1|1400002827|002|DC19183529
3|1400004243|001|DC17458621
4|1400008953|004|1459345892
5|1600009991|001|DC17458621

sort -t',' -uk2,2 commas.txt 
1,1400002827,002,DC19183529
3,1400004243,001,DC17458621
4,1400008953,004,1459345892
5,1600009991,001,DC17458621