![在 shell 脚本中编辑文件](https://linux22.com/image/856497/%E5%9C%A8%20shell%20%E8%84%9A%E6%9C%AC%E4%B8%AD%E7%BC%96%E8%BE%91%E6%96%87%E4%BB%B6.png)
我是 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
请注意,在尝试将其相乘之前,它实际上并不检查它是否是一个数字字段。