gpt4 book ai didi

awk - 用awk计算距离

转载 作者:行者123 更新时间:2023-12-05 08:59:33 26 4
gpt4 key购买 nike

我有如下所示的文本文件。

 CA     21.660  -6.795  11.323 
C 28.811 -9.801 16.262
O 23.221 -9.266 13.799
CB 33.528 -11.934 17.900
N 21.660 -6.795 11.323
O 32.410 -8.539 16.566

我想计算原子坐标之间的距离。例如,我想读取文件夹中的所有文件并计算第一个和第二个原子之间、第一个和第三个、第一个和第四个等之间的距离。然后,第二个和第三个、第二个和第四个、第二个和第五个等。公式是 SQRT ((X1-X2)^2 + (Y1-Y2)^2 + (Z1-Z2)^2)。我想将每个文件的输出保存到另一个具有输入文件名称的文件夹中。我如何使用 awk 执行此操作?

期望的输出

CA-C  4.52
CA-O 3.80
CA-CB 5.68
CA-N 8.94
--
--
--
N-O 5.98

您的帮助将不胜感激!

最佳答案

这是使用 GNU awk 的一种方法:

awk 'FNR==NR { a[NR]=$0; next } { for (i=FNR+1;i<=NR-1;i++) { split(a[i],b); print $1 "-" b[1], sqrt(($2-b[2])^2 + ($3-b[3])^2 + ($4-b[4])^2) | "column -t" } NR--}' file file

它可以满足您的要求,但要么您提供的算法与您要求的不同,要么您的预期输出计算不正确(我假设后者是问题所在)。不管怎样,结果如下:

CA-C   9.19601
CA-O 3.83055
CA-CB 14.5092
CA-N 0
CA-O 12.0869
C-O 6.13194
C-CB 5.42981
C-N 9.19601
C-O 3.82595
O-CB 11.4092
O-N 3.83055
O-O 9.62406
CB-N 14.5092
CB-O 3.81517
N-O 12.0869

如果您需要对当前工作目录中的多个文件执行此操作,并假设此目录中只有感兴趣的文件,您可以在 awk< 周围包装一个 for 循环声明。显然,您需要将 /path/to/folder/ 更改为您选择的路径才能正常工作:

for i in *; do awk 'FNR==NR { a[NR]=$0; next } { for (i=FNR+1;i<=NR-1;i++) { split(a[i],b); print $1 "-" b[1], sqrt(($2-b[2])^2 + ($3-b[3])^2 + ($4-b[4])^2) | "column -t > /path/to/folder/" FILENAME } NR--}' "$i"{,}; done

关于awk - 用awk计算距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13685335/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com