链接两个参数 - Shell脚本

时间:2015-08-17 01:08:00

标签: linux shell replace parameters concatenation

我正在编写一个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,等等。然后我可以替换最后一列中的值。

这可能吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

$ 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

    打印新修改的行。

答案 1 :(得分:0)

假设你的映射只是从一个数字到一个字母,你真的只需要一个数组。请参阅以下内容:

http://www.tldp.org/LDP/abs/html/arrays.html

如果您需要更复杂的内容,请参阅关联数组:

http://www.linuxjournal.com/content/bash-associative-arrays

如果您需要澄清,请告诉我。