У меня есть старый код 2003 года, который использует -t
опцию для uniq
команды. Выдает ошибку, так как эта опция, вероятно, больше не поддерживается.
Вот кусок, который использует команду:
egrep -n "{ IA32_OP" ia32-decode.c | \
awk '{ print $1 $3 $4 }' | \
sort -t '(' +1 | \
uniq -t ':' -f 1 | \
sed 's/\(.*\)\:IA32_OP(\(.*\)),/#define IA32_OP_\2 \1/g' >> ia32_opcodes.h
Что этот вариант сделал тогда? Чем я могу заменить эту команду?
man uniq
,-f 1
избегает сравнения первого поля. Я бы сделал вывод,-t ':'
что-t
предполагается заменить полевой сепаратор с пробелов на:
.-t
была опция, специфичная для Debian, которая позже была удалена?uniq
не было того же самого-t
и-k
как сортировать или почему сортировка не имела всехuniq
встроенных функций (так как теперь имеет-u
). Те-w
/-f
/-s
от GNU уник не имеют смысла. Почему они не могут использовать тот же синтаксис, что иsort
.Ответы:
Единственная ссылка, которую я смог найти,
-t
- это исправление в списке рассылки GNU, которое содержит, среди прочего, следующее:Это, очевидно, расширение GNU, но больше не используется. Похоже, что позволяет выбрать символ-разделитель для полей, кроме пробелов или вкладок. Попробуйте заменить
с
который заменит
:
пробелы, которые uniq распознает разделитель полей.источник
g
отsed
, так как пропускается только первое поле. Для работы последней строки требуется по крайней мере одна двоеточие (надеюсь, не первая). Тем не менее, нет никакой гарантии, что он будет работать (любое из первых полей может содержать пробелы)Учитывая
man
запись для-f
опции:Я думаю, что вполне безопасно предположить, что
-t
определяет разделитель полей (это также имеет местоsort
в приведенной выше строке). Комбинация двух опций заставитuniq
работать только на той части строки, которая следует за первым двоеточием.источник