在 shell 脚本中编辑文件

在 shell 脚本中编辑文件

我是 Linux 新手。我在 Linux 上运行一个模拟包。每次迭代都会生成一个如下所示的文件。我需要做一些修改,然后使用修改后的文件作为下一次迭代的输入。我想通过 shell 脚本完成此修改,这样我就不需要在每次迭代后手动执行此操作。修改如下:第 9 行(Direct 下方)有 xyz 坐标。每行的第三列应乘以一个常数(例如 1.03)。

我应该如何在 shell 脚本中执行此操作?我可以在 MATLAB 中执行此操作,但我不熟悉 linux 中的命令。

谢谢你!

####生成的文件从下一行开始

POSCAR for FCC Cu (created manually) 

   1.00000000000000

   7.6799999999999997    0.0000000000000000    0.0000000000000000

   3.8399999999999999    6.6509999999999998    0.0000000000000000

   0.0000000000000000    0.0000000000000000   41.0000000000000000
  72  40  40

Selective dynamics

Direct

  0.0000000000000000  0.0000000000000000  1.0000000000000000   F   F   F 

  0.9999979999999979  0.3328410000000019  1.0000000000000000   F   F   F

  0.9999960000000030  0.6656819999999968  0.0000000000000000   F   F   F

  0.3328369999999978  0.0000000000000000  0.0000000000000000   F   F   F

  0.3328360000000004  0.3328410000000019  2.0000000000000000   F   F   F

  0.3328339999999983  0.6656819999999968  3.0000000000000000   F   F   F

  0.6656750000000002  0.0000000000000000  5.0000000000000000   F   F   F

  0.6656729999999982  0.3328410000000019  2.0000000000000000   F   F   F

  0.6656710000000032  0.6656819999999968  1.0000000000000000   F   F   F

答案1

要修改第 9 行以下所有非空行中以空格分隔的第三个字段,并保留数字格式,您可以执行以下操作

awk 'NR>9 && NF {$3=sprintf("%.16f",$3*1.03);} 1' file

$3请注意,在尝试将其相乘之前,它实际上并不检查它是否是一个数字字段。

相关内容