2014-11-11 8 views
0

Я нашел некоторые данные, которые, как представляется, ведут себя странно в «сортировке». При выполнении численного сортирования в первом поле csv-файла наличие или отсутствие 4-го столбца приводит к неправильной сортировке 7-й строки.Почему «сортировка», похоже, неправильно сортирует поле в зависимости от наличия или отсутствия другого поля?

Я использую GNU sort 8.21 на Slackware64-current.

данных: https://gist.github.com/anonymous/2a7beb4871b25ae8f8b3

Это работает:

cut -d , -f 1-3 < weird.csv | sort -t , -k 1n 

Это не работает:

cat weird.csv | sort -t , -k 1n 

7-я линия, кажется, неправильно сортировались.

Кажется, я не могу найти очевидного объяснения этого поведения. Использование «g» вместо «n» имеет поведение, которого я ожидал бы, но я не понимаю, какая разница между «g» и «n».

+0

Он корректно работает на OS X, но я воспроизвел его на Linux с помощью GNU sort 8.5. – Barmar

+0

unix.stackexchange.com, вероятно, будет лучшим местом для вопроса. – Barmar

ответ

0

Я узнал, что я делаю неправильно. Подробное объяснение приведено здесь: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=19021

Короче говоря, я должен был использовать '-k 1,1n', чтобы указать, что сортировка должна начинаться и заканчиваться в поле 1. Поскольку я не указывал конечное поле, и моя локаль молча игнорирует запятых в цифрах, это не сравнение чисел, которые я думал, что они сравнивают.