unix: как катать с 2-х входов?

в программировании сценариев UNIX cat - это команда, которая может объединять 2 файла:

cat file1 file2 > file3

это сгенерирует третий, объединив первые два.

также cat можно использовать с pipe:

cat file1 | tail -4

это перечислит последние 4 строки файла 1.

вопрос: как я могу объединить последние 4 строки файла 1 и 2, чтобы сгенерировать файл 3?

я немного потерялся здесь: как дать 2 потока входных данных для cat?


person athos    schedule 11.12.2011    source источник
comment
спасибо ребята, все ваши скрипты работают! : D   -  person athos    schedule 12.12.2011


Ответы (4)


В Bash есть функция подстановки процессов:

  cat <(tail -4 file1) <(tail -4 file2)

Я часто использую эту функцию для сравнения слегка измененных версий двух файлов.

person Community    schedule 11.12.2011

Вы можете сделать следующее (в bash):

(tail -4 file1; tail -4 file2) > file3

Это не использует кошку в соответствии с вашим вопросом, но он достигает цели, которую вы описываете.

person cmbuckley    schedule 11.12.2011

Для этого можно использовать pee из moreutils. Вот мое решение

pee 'tail file1' 'tail file2' </dev/null > file3
person Noufal Ibrahim    schedule 11.12.2011
comment
Этот работает с командами, которые никогда не заканчиваются, например tail -f - person golimar; 09.10.2014

Что случилось с:

cat file1 | tail -4 > ./file3; cat file2 | tail -4 >> ./file3

?

person pajama_coder    schedule 11.12.2011
comment
В этом случае вы можете использовать: tail -4 file1 > ./file3; tail -4 ./file2 >> ./file3 (просто используя tail, а не cat / tail) - person Renato; 23.04.2012