如何使用awk每n行更改一行中的字符?

时间:2017-05-08 16:10:27

标签: bash awk sed

假设我有这种文件:

         248
 STEP:           1
 C      0.975156      8.208886     -0.860474
 C      1.519935      8.610952      0.374438
 C      1.771419      9.990898      0.592491
 C      1.418414     10.881772     -0.466490

         248
 STEP:           6
 C      0.985225      8.205446     -0.859378
 C      1.520091      8.611807      0.372435
 C      1.775156      9.991095      0.588109
 C      1.415878     10.886006     -0.465814

~1500000行

我需要像这样:

         248
 STEP:           1
 C      0.975156      8.208886     -0.860474
 C      1.519935      8.610952      0.374438
 D      1.771419      9.990898      0.592491
 C      1.418414     10.881772     -0.466490

         248
 STEP:           6
 C      0.985225      8.205446     -0.859378
 C      1.520091      8.611807      0.372435
 D      1.775156      9.991095      0.588109
 C      1.415878     10.886006     -0.465814

我怎么能用awk / sed / what来实现这个目标?

1 个答案:

答案 0 :(得分:1)

awk救援!

$ awk '/^ STEP/{c=0}  /^ C/ && ++c==3{sub(/C/,"D")}1' file

或倒计时

$ awk '/^ STEP/{c=3} /^ C/ && !--c{sub(/C/,"D")}1' file

如果您的文件没有前导空格,也可以从模式中删除它们。在上面的发布文件中,您可以使用它们。