Использование gawk для замены шаблона текста содержимым файла, чье имя файла находится внутри текста - PullRequest
0 голосов
/ 09 мая 2018

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

Например, если у меня есть три текстовых файла, в которых external.txt содержит:

   Blah Blah Blah
   INCLUDE inner1.txt
   Etcetera Etcetera
   INCLUDE inner2.txt
   end of file

И inner1.txt, содержащий:

  contents of inner1

И inner2.txt, содержащий:

  contents of inner2

В конце замены файл external.txt будет выглядеть так:

    Blah Blah Blah
    contents of inner1
    Etcetera Etcetera
    contents of inner2
    end of file

Общий шаблон будет таким, что для каждого экземпляра слова "ВКЛЮЧИТЬ" замените всю эту строку содержимым файла, имя файла которого следует сразу за этим экземпляром "ВКЛЮЧИТЬ", который в одном случае будет являться inner1.txt и во втором случае будет inner2.txt.

Проще говоря, возможно ли, чтобы gawk мог определить, какой текстовый файл должен быть встроен во внешний текстовый файл, на основе самого содержимого, которое должно быть заменено во внешнем текстовом файле?

Ответы [ 2 ]

0 голосов
/ 09 мая 2018

С гну сед

sed -E 's/( *)INCLUDE(.*)/printf "%s" "\1";cat \2/e' outer.txt
0 голосов
/ 09 мая 2018

С GNU awk:

awk --load readfile '{if ($1=="INCLUDE") {printf readfile($2)} else print}' outer.txt
...