Если вы прочитаете руководство GNU sort
, вы найдете:
-t separator
, --field-separator=separator
Использовать символьный разделитель в качестве разделителя полей при поиске ключей сортировки в каждом
линия. По умолчанию поля разделяются пустой строкой между непустыми
символ и пустой символ. По умолчанию пробел - это пробел или табуляция, но
локаль LC_CTYPE может изменить это.
То есть, учитывая строку ввода foo bar
, сортировка разбивает ее на поля foo
и
bar
. Разделитель полей не считается частью поля, предшествующего
или следующее поле, так что с sort -t " "
та же строка ввода имеет три
поля: пустое поле, «foo» и «bar». Тем не менее, поля, которые простираются до конца
строки, как -k 2
, или поля, состоящие из диапазона, например -k 2,3
, сохраняют поле
разделители присутствуют между конечными точками диапазона.
Чтобы указать ASCII nul в качестве разделителя полей, используйте двухсимвольную строку \0
,
например, sort -t ’\0’
.
Это работало со старыми (GNU CoreUtils 5.97) sort
.
Похоже, в Linux нет способа сделать это. Я попробовал несколько приемов, чтобы получить байт NUL (0x00) в разделитель, и команда sort
жалуется:
sort: empty tab
Вы не можете сделать это с помощью Control-V @ во время ввода в командной строке; оболочка (bash
) не нравится.
У меня есть программа genchar
, которая записывает байты для вывода, поэтому я попытался:
sort -t "$(genchar 0)" ...
И это тоже не сработало; Я получил ошибку от sort
.
$ genchar 0 | od -c
0000000 \0 \n
0000002
$
Если бы вы могли использовать вместо этого control-A, проблем не было бы.
Обратите внимание, что sort
не расширяет шестнадцатеричные escape-последовательности в аргументе опции * -t
; Вы должны предоставить фактический байт, который вы хотите использовать. Вы, вероятно, также не можете использовать символ новой строки в качестве разделителя полей; если бы вы это сделали, каким бы был разделитель записей?
GNU 'sort' (во всяком случае, из CoreUtils 5.97; текущая версия 8.12 - по состоянию на 2011-04-26) поддерживает опцию -z
:
-z
, --zero-terminated
конец строки с 0 байтов, не перевод строки
К сожалению, это не то, что вы ищете.