gpt4 book ai didi

linux - 链接两个参数 - Shell 脚本

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:50:26 24 4
gpt4 key购买 nike

我正在编写一个 shell 脚本,这里是一个示例输入文件。

 1  N     0.000000    0.000000    0.000000     0     2     5     6     7
2 C 0.000000 0.000000 1.480000 0 1 3 8 9
3 C 1.430212 0.000000 2.000555 0 2 4 13
4 O 2.255128 -0.786666 1.463647 0 3
5 H -0.693210 0.693210 -0.347159 0 1
6 H -0.252566 -0.947254 -0.347159 0 1
7 H 0.947254 0.252566 -0.347159 0 1
8 H -0.501852 0.899485 1.804762 0 2
9 C -0.697228 -1.265943 2.006027 0 2 10 11 12
10 H -0.698163 -1.267642 3.117025 0 9
11 H -0.159269 -2.172191 1.654408 0 9
12 H -1.750698 -1.295700 1.654408 0 9
13 O 1.717017 0.786666 2.942096 0 3

我想做的是将第一列与第二列链接起来,所以 1 表示 N2 表示 C 等。然后我可以替换最后一列中的值。

这可能吗?

谢谢!

最佳答案

$ awk 'FNR==NR{a[$1]=$2; next;} {for (i=8;i<=NF;i++) $i=a[$i]; print;}' file file | column -t
1 N 0.000000 0.000000 0.000000 0 2 H H H
2 C 0.000000 0.000000 1.480000 0 1 C H C
3 C 1.430212 0.000000 2.000555 0 2 O O
4 O 2.255128 -0.786666 1.463647 0 3
5 H -0.693210 0.693210 -0.347159 0 1
6 H -0.252566 -0.947254 -0.347159 0 1
7 H 0.947254 0.252566 -0.347159 0 1
8 H -0.501852 0.899485 1.804762 0 2
9 C -0.697228 -1.265943 2.006027 0 2 H H H
10 H -0.698163 -1.267642 3.117025 0 9
11 H -0.159269 -2.172191 1.654408 0 9
12 H -1.750698 -1.295700 1.654408 0 9
13 O 1.717017 0.786666 2.942096 0 3

工作原理

awk 脚本读取文件两次。第一次通过时,它创建一个数组以将数字转换为化学符号。第二次通过时,它会用新的化学符号写出行。

  • FNR==NR{a[$1]=$2; next;}

    第一次通过时,创建数组a其中有数字到化学信息。然后,跳过其余命令并跳转到 next行。

  • for (i=8;i<=NF;i++) $i=a[$i]

    在第二次通读时,使用数组 a将第 8 列到末尾从数字更改为符号。

  • print

    打印新修改的行。

关于linux - 链接两个参数 - Shell 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32041472/

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