在多行之后插入文本

时间:2013-12-15 10:17:57

标签: unix

我有一个文件,其中包含每36125行的单词MODEL。我想在每次出现“MODEL”字之前添加以下行

REMARK    GENERATED BY TRJCONV
TITLE     DRG t= 980.00000
REMARK    THIS IS A SIMULATION BOX
CRYST1   71.471   71.471   71.471  90.00  90.00  90.00 P 1           1

在Jim回答之后,我做了以下

add='REMARK    GENERATED BY TRJCONV
TITLE     DRG t= 980.00000
REMARK    THIS IS A SIMULATION BOX
CRYST1   71.471   71.471   71.471  90.00  90.00  90.00 P 1           1
'

awk -v n=8 -v s="$add" 'NR == n {print s} {print}' file > newfile

但是这给了我以下错误

awk: newline in string REMARK    GENERATED ... at source line 1

1 个答案:

答案 0 :(得分:1)

尝试:

add="REMARK    GENERATED BY TRJCONV
TITLE     DRG t= 980.00000
REMARK    THIS IS A SIMULATION BOX
CRYST1   71.471   71.471   71.471  90.00  90.00  90.00 P 1           1
"

awk -v var="$add" 'NR>1 && NR%36125==0 {print add} {print $0}' oldfile > newfile

这是在vanilla awk上运行的 - 只是测试了它:

rem1="REMARK    GENERATED BY TRJCONV"
rem2="TITLE     DRG t= 980.00000"
rem3="REMARK    THIS IS A SIMULATION BOX"
rem4="CRYST1   71.471   71.471   71.471  90.00  90.00  90.00 P 1           1"

nawk -v var1="$rem1" \
     -v var2="$rem2" \
     -v var3="$rem3" \
     -v var4="$rem4" \
    'NR>1 && NR%36125==0 {print var1; print var2; print var3; print var4} 
      {print $0}' oldfile > newfile

这是我最初使用awk的奇怪变种的问题 - 抱歉。