найдите строку в файле и измените следующую строку, используя awk - PullRequest
1 голос
/ 15 февраля 2012

У меня очень специфическая проблема, я хочу найти строку, содержащую первое слово * Contro_Contact в file1, и когда он найден, я хочу заменить строку, которая идет после этих двух строк, другой строкой из anthor file2, чтобы параметр автоматически изменялся из файла 2

*CONTROL_CONTACT
$#  slsfac    rwpnal    islchk    shlthk    penopt    thkchg     orien    enmass
0.100000     0.000         2         1         4         0         1         0

Выход может быть

*CONTROL_CONTACT
$#  slsfac    rwpnal    islchk    shlthk    penopt    thkchg     orien    enmass
0.2340000     0.000         2         1         4         0         1         0

Измененная строка у меня из другого файла, так что это не проблема.

Буду ждать предложений экспертов.

Ответы [ 3 ]

2 голосов
/ 15 февраля 2012

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

sed -e '/^\*CONTROL_CONTACT/{n;n;r file2' -e 'd}' file1

или вот это (только bash):

sed '/^\*CONTROL_CONTACT/{n;n;r file2'$'\n'';d}' file1

или если в файле 2 несколько CONTROL_CONTACT и несколько параметров(Только GNU sed):

sed -e '/^\*CONTROL_CONTACT/{n;n;R file2' -e 'd}' file1
2 голосов
/ 15 февраля 2012
awk 'N != 0 || $0 != "*CONTROL_CONTACT"
  N == 0 && $0 =="*CONTROL_CONTACT"{
    N = 1; print; getline; print
    getline; getline < "file2"; print}' file1
1 голос
/ 15 февраля 2012
$ sed -r "/^\*CONTROL_CONTACT/{n;n;s/^\S*/$(head -1 file2)/p;d}" file1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...