Как читать строки из файла и комбинировать перед сопоставлением шаблона из другого файла?

Эта помощь была полезной, но я все еще немного потерян. Я украду это супер легкий формат. Как вставить содержимое файла в другой файл перед шаблоном (маркером)?

У меня два файла.

Файл 1

test test2 test3 test4 

Файл 2

 Numebr of results: 0 Numebr of results: 1 Object Name: Object UID: {A42CD268-ommitted} Class Name: referral last_element: false referral_info: source referral_obj: Name: ommitted (Table: ommitted) scheme_flags: 0 type: member Numebr of results: 0 Numebr of results: 0 

Желаемый конечный результат (файл 3?)

 test Numebr of results: 0 test2 Numebr of results: 1 Object Name: Object UID: {A42CD268-ommitted} Class Name: referral last_element: false referral_info: source referral_obj: Name: ommitted (Table: ommitted) scheme_flags: 0 type: member test3 Numebr of results: 0 test4 Numebr of results: 0 

Глядя на чтение в одной строке за один раз из файла1, найдите следующий шаблон для «Numebr результатов», вставьте строку 1 из файла1 над первым совпадением и последовательно итеритируйте весь файл как таковой.

Огромное спасибо заранее!!

4 Solutions collect form web for “Как читать строки из файла и комбинировать перед сопоставлением шаблона из другого файла?”

Я бы предложил использовать форму Getline / Variable / File для awk getline

 $ awk '/^Numebr of results/ {if (getline line < "file1" > 0) print line} 1' file2 test Numebr of results: 0 test2 Numebr of results: 1 Object Name: Object UID: {A42CD268-ommitted} Class Name: referral last_element: false referral_info: source referral_obj: Name: ommitted (Table: ommitted) scheme_flags: 0 type: member test3 Numebr of results: 0 test4 Numebr of results: 0 
 $ awk 'NR==FNR{A[NR]=$0;next}{if($0~/^Numebr of results/){i++;print A[i]}}1' file1 file2 test Numebr of results: 0 test2 Numebr of results: 1 Object Name: Object UID: {A42CD268-ommitted} Class Name: referral last_element: false referral_info: source referral_obj: Name: ommitted (Table: ommitted) scheme_flags: 0 type: member test3 Numebr of results: 0 test4 Numebr of results: 0 

Может быть сделано с sed , хотя awk будет более подходящим:

эхо "—-" | cat file1 – file2 | sed -n '1, / —- / {H; d}; / Numebr / {x; s / ^ \ n //; P; s / [^ \ n] * \ n //; x;}; п'

Я использовал подоболочку для простого управления файловым дескриптором. (нет необходимости «exec 3> & -»)
файловый дескриптор, унаследованный дочерним процессом
Если вы использовали такой дескриптор файла, то позиция файла перемещалась ниже в каждой операции чтения.
Параметр «e» выполняет строку пространства patteren как команду в sh

 sh$ ( exec 3< file2; sed -r ' /^Number of results: [0-9]+/ { h s#.*#read line <\&3; echo -n "$line"#e G } ' file1; ) 
  • Как добавить скрипт к встроенной Linux
  • Команда для объединения всех окон терминала?
  • Приведение процесса к файловому дескриптору в переменную
  • Оператор вывода вывода в python не входит в журнал cron
  • Чтение пользовательского ввода с чтением
  • Нет файлов и каталогов в определенном каталоге в сценарии оболочки
  • for loop для запуска команды для всех файлов в папке
  • Как проверить, соответствует ли имя файла шаблону?
  • Отправьте EOF на именованный канал - очистка / высыхание fifo
  • Как использовать afl-fuzz (American Fuzzy Lop) с openssl
  • Удаление шаблонов из строки с помощью bash
  • Linux и Unix - лучшая ОС в мире.