unix join разделитель char - PullRequest
22 голосов
/ 12 ноября 2009

Извините за возможно банальный вопрос.

Я немного боролся с командой unix join , пытаясь получить табуляции вместо пробелов в качестве разделителей по умолчанию. -t это аргумент, но они не работают (Ubuntu 9.10 64 бит 2.6.31-14, GNU coreutils версия 7.4)

join file1 file2 -t"\t"
join file1 file2 -t="\t"
join file1 file2 -t="\\t"
join file1 file2 -t $"\t"

и так далее. Конечно, я всегда могу использовать какое-то не элегантное решение, например

join file1 file2 > output
sed "s/ /\t/g" output

Но я хотел выглядеть умно :-) Более того, если есть аргумент -t, он должен работать.

Ответы [ 6 ]

42 голосов
/ 12 ноября 2009

Я думаю, что требуется переменная, сгенерированная на лету

Попробуйте

join file1 file12 -t $'\t'
5 голосов
/ 07 сентября 2012

Вы можете перейти на вкладку, нажав CTRL + v Tab

join -t '<CTRL+v><Tab>' file1 file2
3 голосов
/ 21 февраля 2015

Альтернативный прием, который, кажется, работает, заключается в том, чтобы заключить опцию -t в кавычки с буквенным символом табуляции. Это выглядит так:

join '-t    ' ...

с переменным пробелом между t и закрывающей кавычкой (так как это табуляция).

Набрано, это:

join<Spc>'-t<Ctrl-v><Tab>' ...
3 голосов
/ 02 мая 2010
join -t "`echo '\t'`" file1 file2

ps: на моем компьютере, Red Hat Enterprise Linux Server версии 5.1 (Tikanga), команда join -t $'\t' file1 file2 возвращает «Недопустимое имя переменной».

2 голосов
/ 12 ноября 2009

man join говорит, что опции должны идти перед именами файлов. Вы пробовали

join -t "\t" file1 file2

Редактировать: Отражая ответ Тонио, правильная строка будет читать

join -t $'\t' file1 file2
0 голосов
/ 25 апреля 2016

Другой способ это:

join -t "` echo -e "\ t" `" file1 file2`

или в стиле bash:

join -t "$ (echo -e" \ t ")" file1 file

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