当分隔符为逗号时,有人可以解释为什么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
使用逗号和管道给出不同的输出。
答案 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