使用 awk 取第二列值之间的差异

take difference between 2nd column values using awk

我有一个数据文件,我们称它为fileA。它有两列,我想取第二列的差值并将输出乘以 13.6,然后将其写在第三列中,顶部应写为 Ediff(eV)。

文件A

36 -448.21483529
40 -448.23331592
44 -448.24002943
48 -448.24322255
50 -448.24407044
52 -448.24486713
.
.
.
.

期望输出

36 -448.21483529  Ediff(eV)
40 -448.23331592 -0.251337
44 -448.24002943 -0.0913037
48 -448.24322255 -0.0434264
50 -448.24407044 -0.0115313
52 -448.24486713 -0.010835
.
.
.
.

半工作解决方案

搜索后我发现 this answer 可以解决我的问题,但我还需要输入单位。请帮助我。

awk 'NR>1{=-p} {p=} 1' FileA ------找到解决方案
awk 'NR>1{=(-p)*13.6} {p=} 1' FileA--------乘以13.6

乘以13.6后的输出

36 -448.21483529
40 -448.23331592 -0.251337
44 -448.24002943 -0.0913037
48 -448.24322255 -0.0434264
50 -448.24407044 -0.0115313
52 -448.24486713 -0.010835

如何在 Ediff 值的顶部添加 Ediff(eV)?

你可以使用这个awk:

awk '{print [=10=], (NR > 1 ? (-p)*13.6 : "Ediff(eV)"); p=}' fileA

36 -448.21483529 Ediff(eV)
40 -448.23331592 -0.251337
44 -448.24002943 -0.0913037
48 -448.24322255 -0.0434264
50 -448.24407044 -0.0115313
52 -448.24486713 -0.010835

gawkmawk 之间关于它们如何跟踪的代码略有不同 ++NF

代码

mawk '$++NF=!_<NR?13.6*(-__+(__=$(NF-!_))):substr("Ediff(eV)",(__=$(NF-!_))~_)'

gawk '$++NF=!_<NR?13.6*(-__+(__=$NF)):substr("Ediff(eV)",(__=$NF)~_)'

输出

36 -448.21483529 Ediff(eV)
40 -448.23331592 -0.251337
44 -448.24002943 -0.0913037
48 -448.24322255 -0.0434264
50 -448.24407044 -0.0115313
52 -448.24486713 -0.010835