在行之间插入单词

时间:2012-11-28 07:25:41

标签: sed

我有pdb(蛋白质数据库)文件,有几千行。

REMARK   1                     PDB file generated by ptraj (set  1000)
ATOM      1  O22 DDM     1       2.800   4.419  20.868  0.00  0.00
ATOM      2  H22 DDM     1       3.427   4.096  20.216  0.00  0.00
ATOM      3  C22 DDM     1       3.351   5.588  21.698  0.00  0.00
ATOM      4  H42 DDM     1       3.456   5.274  22.736  0.00  0.00
ATOM      5  C23 DDM     1       2.530   6.846  21.639  0.00  0.00
ATOM      6  H43 DDM     1       2.347   7.159  20.611  0.00  0.00
ATOM      7  O23 DDM     1       1.313   6.498  22.334  0.00  0.00
ATOM      8  H23 DDM     1       0.903   5.837  21.771  0.00  0.00
ATOM      9  C24 DDM     1       3.073   8.109  22.266  0.00  0.00
ATOM     10  H44 DDM     1       3.139   7.837  23.319  0.00  0.00
ATOM     11  O24 DDM     1       2.218   9.278  22.007  0.00  0.00
ATOM     12  H24 DDM     1       1.278   9.184  22.179  0.00  0.00
ATOM     13  C25 DDM     1       4.494   8.317  21.764  0.00  0.00
ATOM     14  H45 DDM     1       4.391   8.452  20.687  0.00  0.00

我想在该文件中每81行插入一个单词“TER”,其中包含超过20,000行但忽略第一行,因为它是注释。

我浏览互联网,似乎SED可以做到。但我迷路了。

任何人都可以指导吗? 提前谢谢。

3 个答案:

答案 0 :(得分:1)

试试这个:

sed -i -e '1~81 i\TER' file

答案 1 :(得分:1)

我偏爱awk自己:

 awk '{if(FNR%81==0)print "TER"; print}' file

我发现这比sed等价物更容易理解和调试。唯一的魔力是FNR是行号

你可能不得不使用if中的数字来完全按照你想要的方式获得数字。

答案 2 :(得分:0)

更详细的shell命令是

{
    read header
    echo "$header"
    i=0
    while read line; do
        echo "$line"
        if (( ++i == 81 )); then
            echo TER
            i=0
        fi
    done
} < infile > outfile &&
mv outfile infile