Как объединить два файла, вставив строки в разных местах с помощью awk / sed - PullRequest
0 голосов
/ 01 ноября 2019

У меня есть два файла: file1.txt и file2.txt. Первый, file1.txt, содержит много информации и с нерегулярными интервалами показывает слово TIMESTEP. Второй, file2.txt, с другой стороны, содержит только один столбец целочисленных значений. Я хотел бы проанализировать файл file1.txt, найти строки с параметром TIMESTEP и заменить строку , следующую за , следующей строкой из file2.txt. Например:

file1.txt

ITEM: TIMESTEP
54
abc
def
ghi
jkl
ITEM: TIMESTEP
55
horse
cat
dog
ITEM: TIMESTEP
56
tree
ITEM: TIMESTEP
57
house
school
...

file2.txt

150
68
201
202
...

Объедините их, чтобы получить:

ITEM: TIMESTEP
150
abc
def
ghi
jkl
ITEM: TIMESTEP
68
horse
cat
dog
ITEM: TIMESTEP
201
tree
ITEM: TIMESTEP
202
house
school
...

Спасибо!

Ответы [ 2 ]

1 голос
/ 01 ноября 2019

Это может работать для вас (GNU sed):

sed -e '/TIMESTEP/{n;R file2' -e 'd}' file1

После обнаружения строки, содержащей TIMESTEP print и затем извлечь следующую строку, прочитать / распечатать строку из file2 и затем удалить текущуюстрока из файла1.

1 голос
/ 01 ноября 2019
$ awk '
    NR==FNR { vals[NR]=$0; next }
    found { $0=vals[++cnt]; found=0 }
    /TIMESTEP/ { found=1 }
    { print }
' file2 file1
ITEM: TIMESTEP
150
abc
def
ghi
jkl
ITEM: TIMESTEP
68
horse
cat
dog
ITEM: TIMESTEP
201
tree
ITEM: TIMESTEP
202
house
school
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...