Мне интересно, могу ли я использовать шестнадцатеричное значение как разделитель утилиты Unix sort
.
В основном я хочу сделать что-то вроде:
sort -t '\x00' <input
Но это не сработает, если я сделаю это выше.
Мне интересно, могу ли я использовать шестнадцатеричное значение как разделитель утилиты Unix sort
.
В основном я хочу сделать что-то вроде:
sort -t '\x00' <input
Но это не сработает, если я сделаю это выше.
Если вы прочитали руководство 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 байт, а не символ новой строкиЭто, к сожалению, не то, что вы ищете.