Как объединить три файла (и пропустить первую строку одного файла) и отправить их в качестве входных данных в мою программу?

Я установил vim, и он работал

apt-get install vim

edit: Это решение.

4
19.10.2016, 22:51
6 ответов

Используйте подоболочку. Выполните команды в подоболочке и направьте вывод в свою программу.

(cat a; echo; cat b; tail -n+2 c) | ./myProgram
5
27.01.2020, 20:44

Попробуйте следующее:

{ cat A ; echo; cat B ; awk 'NR>1' C ; } | programm

поместите команды в фигурные скобки - это группировка .

Не то чтобы ; обязательно, если нет новой строки для завершения группировки .

И нет необходимости в другой подоболочке здесь;)

12
27.01.2020, 20:44
tail -n +2 C | cat A <(echo) B - | myProgram

Здесь вы указываете tail читать, начиная со строки 2, и передавать ее cat , которая объединяется в порядке A + B + STDIN (-), а затем передает ее в myProgram.

Правка: Добавлена ​​новая строка между A и B.

4
27.01.2020, 20:44

подход awk

awk 'ARGIND<3;ARGIND==3&&FNR>1' a b c | ./myProgram
3
27.01.2020, 20:44

Использование подстановки процесса

./myProgram < <(cat A; echo ''; cat B; tail -n +2 C)

<(commands) создает файл FIFO, который затем считывается в программу

Вы можете проверить, выполнив

$ echo <(cat A; echo ''; cat B; tail -n +2 C) / dev / fd / 63

Замена процесса поддерживается в системах, поддерживающих именованные каналы {{ 1}} (FIFO) или метод / dev / fd именования открытых файлов. Он принимает форму из <(список) или> (список). Список процессов запускается со своим входом или выходом - помещается в FIFO или какой-либо файл в / dev / fd.Имя этого файла передается в качестве аргумента текущей команде в результате раскрытия . Если используется форма> (список), запись в файл будет про - вид ввода для списка. Если используется форма <(список), файл, переданный как аргумент , должен быть прочитан для получения вывода списка. Если доступно, подстановка процесса выполняется одновременно с раскрытие параметров и переменных, подстановка команд и арифметическое раскрытие .

6
27.01.2020, 20:44

Еще несколько возможностей:

{ grep -h "^" A B ; { read; cat; } < C ; } | ./myProgram
  • grep "^" соответствует началу каждой строки, даже если последняя строка не заканчивается новой строкой. -h не позволяет grep ставить перед каждым совпадением префикс имени файла.
  • read читает (и отбрасывает) первую строку C, затем cat дает остальную часть C.

Или просто с помощью sed :

{ sed "" A B ; sed "1d" < C ; } | ./myProgram
2
27.01.2020, 20:44

Теги

Похожие вопросы