使用 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
gawk
和 mawk
之间关于它们如何跟踪的代码略有不同 ++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
我有一个数据文件,我们称它为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
gawk
和 mawk
之间关于它们如何跟踪的代码略有不同 ++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