2015-08-05 4 views
0

Может кто-нибудь объяснить, почему вывод сортировки UNIX отличается, когда разделитель является запятой ',' и pipe '|'Unix sort issue

Я знаю, что я применяю числовую сортировку по алфавитно-цифровому столбцу, но я думаю, что выход не должен отличаться, если разделитель является запятой или трубой.

Файл с запятой разделителем:

 
$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

Тестирование другими символами заставляет меня думать, что есть что-то о числовых разделителях, потому что я получаю тот же результат с '.' dot, как с ',', но если я ставлю, например, ';' это то же самое, что и с трубами. Также обратите внимание, что параметр '-k' принимает только 2, если вы удаляете', 4', вы все равно получите тот же результат. – cnluzon

+0

Просто для объяснения моего комментария раньше, потому что я ошибался: '-k2,4' сортируется из столбца' 2' в '4', что в этом случае совпадает с' -k2', который находится в столбце ' 2' до конца. – cnluzon

ответ

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 
Смежные вопросы