ограниченная сортировка ключей в Unix - PullRequest
1 голос
/ 26 октября 2010

У меня есть файл file1.txt с данными:

2010/09/04,21:53:42.048,a
2010/09/04,21:53:40.923,b
2010/09/04,21:53:40.923,a
2010/09/04,21:50:42.048,a.

Я хочу отсортировать файл по отметке времени.В настоящее время я использую

 sort  -t% -k1.1,1.23 file1.txt > file2.txt 

Мой ожидаемый результат -

2010/09/04,21:50:42.048,a
2010/09/04,21:53:40.923,b
2010/09/04,21:53:40.923,a
2010/09/04,21:53:42.048,a

Но я получаю следующий вывод

2010/09/04,21:50:42.048,a
2010/09/04,21:53:40.923,a
2010/09/04,21:53:40.923,b
2010/09/04,21:53:42.048,a

Я использую SFU3.5 дляокна.Я использую сортировку

: сортировка [-o output] [-cmubdfinr] [-t char] [-T char] [-k keydef] ... [files]

Пожалуйстаобеспечить возможную душевность.

Ответы [ 2 ]

4 голосов
/ 26 октября 2010

Похоже, проблема стабильность , поэтому попробуйте использовать параметр --stable:

-s, --stable
      stabilize sort by disabling last-resort comparison

Обновление:
Кажется, что SFU не поддерживает опцию -s и постоянно работает нестабильно. Вы можете попробовать использовать альтернативную сортировку, например, поставляемую с unxutils .

1 голос
/ 26 октября 2010

Если вы не можете получить сортировку с помощью «стабильной» опции, вы можете создать дополнительный ключ с помощью «cat -n» или awk, использовать его в сортировке, когда вам нужен исходный порядок, и убрать его. потом. Почему бы не указать сортировке, что запятая тоже является разделителем полей, тогда вам не нужно считать 23 символа.

awk '{print NR "," $0}' dat | sort -t, -k2,2 -k1n,1 | sed 's/^[^,]*,//'

A стабильная сортировка - это та, которая сохраняет исходный порядок, если ключи сортировки равны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...