1

我有数千行的 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 可以做到。但我迷路了。

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

4

3 回答 3

1

试试这个:

sed -i -e '1~81 i\TER' file
于 2012-11-28T07:30:16.897 回答
1

我偏爱awk自己:

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

我发现这比sed同类产品更容易理解和调试。唯一的魔力是FNR行号

您可能不得不摆弄 中的数字if才能完全按照您想要的方式获得它。

于 2012-11-28T07:38:12.137 回答
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
于 2012-11-28T16:36:55.167 回答