在文件中搜索字符串并使用awk更改下一行

时间:2012-02-15 10:02:51

标签: linux string awk replace

我有一个非常具体的问题,我想搜索包含第一个单词的行 *文件1中的Contro_Contact,当找到它时,我想用来自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 个答案:

答案 0 :(得分:2)

awk 'N != 0 || $0 != "*CONTROL_CONTACT"
  N == 0 && $0 =="*CONTROL_CONTACT"{
    N = 1; print; getline; print
    getline; getline < "file2"; print}' file1

答案 1 :(得分:2)

这可能对您有用:

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 :(得分:1)

$ sed -r "/^\*CONTROL_CONTACT/{n;n;s/^\S*/$(head -1 file2)/p;d}" file1