2

Сегодня я думал, что делаю простую операцию:

git blame file | sort -k 3

Получить все строки file отсортированные по дате последнего изменения. К сожалению, это, кажется, не сортирует это правильно. Это действительно работает , если я делаю следующее:

git blame file | cut -c 20- | sort

Который просто отрубает первую часть строки, а затем выполняет сортировку. Успех этой команды указывает мне на то, что sort может фактически выполнить ту операцию, которую я пытался. Почему это не сработало?

Вот пример строки из git blame file:

35d8e9eb (username 2007-01-17 03:58:04 +0000 155) Some text on line 155

Изменить: Использование любого разумного числа, кроме 3 в исходной командной строке, кажется, работает нормально - я могу отсортировать по хешу (поле 1), имени пользователя (поле 2), времени дня (поле 4) или номеру строки ( поле 6), но дата (поле 3) не работает - я не могу определить, в каком порядке она на самом деле заканчивается ...

Редактировать 2: я сделал обеззараженный входной файл, который показывает ту же проблему. Вот cleaned.txt:

cb7bb041 (eeeeeee  2010-12-14 19:41:18 +0000  42)
35d8e9eb (cccccccc 2007-01-17 03:58:04 +0000 135)
d7377fa9 (hhhhhhhh 2010-01-30 04:26:28 +0000 178)

И вывод из sort -k 3 cleaned.txt:

$ sort -k 3 cleaned.txt 
cb7bb041 (eeeeeee  2010-12-14 19:41:18 +0000  42)
35d8e9eb (cccccccc 2007-01-17 03:58:04 +0000 135)
d7377fa9 (hhhhhhhh 2010-01-30 04:26:28 +0000 178)

Как вы можете видеть, сортировка по полю даты вообще не состоялась. Вот вывод из cut -c 20- cleaned.txt | sort по :

$ cut -c 20- cleaned.txt | sort
2007-01-17 03:58:04 +0000 135)
2010-01-30 04:26:28 +0000 178)
2010-12-14 19:41:18 +0000  42)

Сортировка по датам в таком случае работает отлично! Какие-либо предложения?

1 ответ1

4

Я просто понял это. Более короткое имя пользователя eeeeeee означает, что перед полем даты есть дополнительный пробел. Поскольку разделитель полей для sort является непустым переходом к пустому полю, поле даты для строки с более коротким именем пользователя содержит это пространство как часть ключевого поля и сортируется первым. Простое исправление:

git blame file | sort -b -k 3

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .