如何使用AWK编辑特定行并复制rest?

如何使用AWK编辑特定行并复制rest?,awk,sed,Awk,Sed,我有以下文件名为ABCD.vasp: # A B C D 1.000000 13.85640621 0.00000000 0.00000000 4.61880236 13.06394496 0.00000000 0.00000000 0.00000000 45.25483322 A B C D 32 32 32 32 Selective dynam

我有以下文件名为
ABCD.vasp

# A B C D
1.000000
     13.85640621        0.00000000        0.00000000
      4.61880236       13.06394496        0.00000000
      0.00000000        0.00000000       45.25483322
A B C D
   32      32      32      32
Selective dynamics
Direct
      0.00000000        0.00000000        0.00000000 F F F
      0.00000000        0.00000000        0.12500000 F F T
      0.00000000        0.00000000        0.25000000 F F T
      0.00000000        0.00000000        0.37500000 F F T
      0.50000000        0.00000000        0.00000000 F F F
      0.50000000        0.00000000        0.12500000 F F T
      0.50000000        0.00000000        0.25000000 F F T
      0.50000000        0.00000000        0.37500000 F F T
      0.12500000        0.37500000        0.06250000 F F T
      0.12500000        0.37500000        0.18750000 F F T
      0.12500000        0.37500000        0.31250000 F F T  
我要对上述文件执行的操作:

  • 我想将第一行
    9
    复制到名为
    test.vasp
  • 行号
    10
    之后,如果第三列
    >=0.25
    ,则第一列应增加
    0.025
    ,并且应将整行添加到
    测试。vasp
  • 如果第三列为test.vasp,行号
    10
    以后
    请在
    awk
    sed
    中建议解决方案。您可以使用此
    awk

    awk 'NR > 9 && $3+0 >= 0.25 { $1 += .025 } 1' file > test.vasp
    
    awk 'NR > 9 && $3+0 >= 0.25 {
       p = $1; p += .025; sub(/[^ \t]+/, sprintf("%.8f", p)) } 1' file > test.vasp
    
    cat test.vasp
    
    请注意,在此过程中,列之间的前导空格和多个空格可能会被截断。如果要保留这些,请使用此
    awk

    awk 'NR > 9 && $3+0 >= 0.25 { $1 += .025 } 1' file > test.vasp
    
    awk 'NR > 9 && $3+0 >= 0.25 {
       p = $1; p += .025; sub(/[^ \t]+/, sprintf("%.8f", p)) } 1' file > test.vasp
    
    cat test.vasp
    

    谢谢@anbhava,成功了!编辑的行有空格,而未编辑的行有制表符。有没有办法让awk保持与输入文件相同的间距?是的,检查第二个awk解决方案。现在我在这个答案的基础上@anubhava构建。我可以用FOR循环的变量乘以0.025吗?我想生成10个不同的文件,从0.025乘以0。25@Sufyan:这是可以做到的,但如果您想在单个awk命令中实现这一点,那么在这个解决方案中这并不是一个微不足道的更改。我可以请你发布一个新的问题,这样我们会更清楚,你会得到更多的答案。问题是:谢谢!