Заменить определенные строки в одном файле данными, содержащимися в другом файле - PullRequest
0 голосов
/ 04 октября 2019

Я хочу заменить определенные строки в одном файле (Файл 1) данными, содержащимися в другом файле (Файл 2). Например: Файл 1 (Код ввода):

 other lines...
 11 !!! Regular Expression
 10 0.685682*100
 11 0.004910*100
 12 0.007012*100
 13 0.146041*100
 14 0.067827*100
 15 0.019460*100
 16 0.019277*100
 17 0.001841*100
 18 0.047950*100
 other lines...

Файл 2 (для добавления новых данных):

 1 0.36600*100
 2 0.44466*100
 3 0.0.046*100
 4 0.15544*100
 5 0.16600*100
 6 0.14477*100
 7 0.01927*100
 8 0.00188*100
 9 0.05566*100

Как заменить входные данные (Файл 1) со строки1 в строке n с данными, содержащимися в файле 2 (данные). Я попытался использовать sed следующим образом:

sed '/!!! Regular Expresion/r File2' File1

и получаю следующее:

 1 !!! Regular Expression
 2 0.36600*100
 3 0.44466*100
 4 0.0.046*100
 5 0.15544*100
 6 0.16600*100
 7 0.14477*100
 8 0.01927*100
 9 0.00188*100
 10 0.05566*100
 11 0.685682*100
 12 0.004910*100
 13 0.007012*100
 14 0.146041*100
 15 0.067827*100
 16 0.019460*100
 17 0.019277*100
 19 0.001841*100
 20 0.047950*100

Моя проблема в том, что эта команда может вставлять строки, содержащиеся в файле 2, но не заменять ихих. Как я могу заменить только эти строки (от 10 до 18) новыми данными?.

Заранее спасибо.

1 Ответ

0 голосов
/ 10 октября 2019

заменить определенные строки в одном файле от 10 до 18 данными, содержащимися в файле 2

. Позволяет использовать динамическое программирование и разделять «замена» на «удаление» и «вставка».

[Удалить] определенные строки в одном файле от 10 до 18

Это просто:

sed '10,18d'

удалит строки с 10 до 18.

[вставить] данные, содержащиеся в файле 2 [в строку 10]

Это также просто:

sed '9r file2'

Добавляет содержимоеfile2 после строки 9, поэтому первая строка file2 - это новая строка 10.

Все вместе:

sed '10,18d; 9r file2'

Пример:

# seq 8 | sed '3,6d; 2r '<(seq -f 2%.0f 5)
1
2
21
22
23
24
25
7
8
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...