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

标签 bash 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{$3=$2-p} {p=$2} 1' FileA -------找到解决方案
awk 'NR>1{$3=($2-p)*13.6} {p=$2} 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 $0, (NR > 1 ? ($2-p)*13.6 : "Ediff(eV)"); p=$2}' 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

关于bash - 使用 awk 获取第二列值之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71979226/

相关文章:

linux - awk 将输出解析为文件,optirun 不起作用

bash 脚本和条件语句

bash - 使用 bash 脚本从变量中提取子字符串

linux - 从 AWK 命令获取输出并根据空格逐行显示

awk 匹配列中的多个模式

linux - 如何使用 awk 提取引用字段?

Linux 从可执行 bash 文件更改目录

bash - 如何使用 sed(或 awk)进行链接规范化,获取文件名?

bash - 有没有办法检查 bash 脚本是否完整?

unix - AWK 每隔 n 行拆分文件,但将 ID 分组在一起