搜索字符串以字母开头,并将其第n列值替换为另一个文件值

时间:2017-12-01 17:10:40

标签: awk

我正在尝试使用H,C,O,N,S搜索字符串,并将其第14,15和第16列值替换为其他文件名frac(逐行)的值。我尝试使用以下awk命令制作一行脚本,但它不起作用。任何帮助深表感谢。

awk -v c="`cat frac`" 'BEGIN {n=split(c,frac," "); ifrac=0} { printf("%s",$0); if ($1=="^H|^C|^O|^N|^S"){printf ("%2.5f %2.5f %2.5f", frac[++ifrac], $14, $15, $16); for (i=3;i<=NF;i++) {printf("%6d.",$i);}} printf ("\n")}' file

我想要进行更改的文件如下所示,例如:对于第一行以字母C开头,我想用frac文件中的0.29035 0.05915 -0.06369更改coulmn 14,15和16的值。

C(5HFE  )  1  2 3304 3122 3124      1    3   28    4    1   99  0.28098  0.04363  0.00841  1.0000
  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000
  3.9170  0.0000  0.0560  0.0000  0.0000 -0.1800  0.0000  0.0000 -0.0290  0.0000
  0.0000  0.0300  0.0000  0.0000  0.0000 -0.2640  0.0000  0.0200  0.0000  0.0000
 -0.0190  0.0000  0.0000  0.0000  0.0000  0.0000
H(5HFF  )  3  2 3122 3123 3124      1    2   24    4    1   95  0.27093  0.03969  0.00791  1.0000
  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000
  1.0440  0.0000  0.0000  0.0000  0.1820  0.0860  0.0000  0.0000  0.0000  0.0000
  0.0000  0.0000  0.0000  0.0000  0.0000  0.0000  0.0000  0.0000  0.0000  0.0000
  0.0000  0.0000  0.0000  0.0000  0.0000  0.0000
C(5HFG  )  1  2 3304 3124 3122      1    3   28    4    1   99  0.28246  0.05703  0.01056  1.0000
  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000
  3.9170  0.0000  0.0560  0.0000  0.0000 -0.1800  0.0000  0.0000 -0.0290  0.0000
  0.0000  0.0300  0.0000  0.0000  0.0000 -0.2640  0.0000  0.0200  0.0000  0.0000
 -0.0190  0.0000  0.0000  0.0000  0.0000  0.0000
H(5HFH  )  3  2 3124 3125 3122      1    2   24    4    1   95  0.27416  0.06383  0.01183  1.0000
  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000
  1.0440  0.0000  0.0000  0.0000  0.1820  0.0860  0.0000  0.0000  0.0000  0.0000
  0.0000  0.0000  0.0000  0.0000  0.0000  0.0000  0.0000  0.0000  0.0000  0.0000
  0.0000  0.0000  0.0000  0.0000  0.0000  0.0000
C(5HFI  )  3  1 3110 3126 3128      1    3   35    4    1  363  0.29880  0.08862 -0.01177  1.0000
  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000
  4.0465  0.0000  0.0000  0.0000 -0.0810  0.0000  0.0000  0.0000  0.2750  0.0000
  0.3130  0.0000  0.0000 -0.2320  0.0000  0.0000  0.0000  0.0400  0.0000  0.0000
  0.0000  0.0000  0.0000  0.0000  0.0430  0.0000

这里是压缩文件的样子

0.29035 0.05915 -0.06369
0.28657 0.07680 -0.05079
0.28180 0.08165 -0.05931
0.27456 0.07357 -0.04197
0.27485 0.07855 -0.03091

预期结果:

C(5HFE  )  1  2 3304 3122 3124      1    3   28    4    1   99  0.29035 0.05915 -0.06369  1.0000
  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000
  3.9170  0.0000  0.0560  0.0000  0.0000 -0.1800  0.0000  0.0000 -0.0290  0.0000
  0.0000  0.0300  0.0000  0.0000  0.0000 -0.2640  0.0000  0.0200  0.0000  0.0000
 -0.0190  0.0000  0.0000  0.0000  0.0000  0.0000
H(5HFF  )  3  2 3122 3123 3124      1    2   24    4    1   95  0.28657 0.07680 -0.05079  1.0000
  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000
  1.0440  0.0000  0.0000  0.0000  0.1820  0.0860  0.0000  0.0000  0.0000  0.0000
  0.0000  0.0000  0.0000  0.0000  0.0000  0.0000  0.0000  0.0000  0.0000  0.0000
  0.0000  0.0000  0.0000  0.0000  0.0000  0.0000
C(5HFG  )  1  2 3304 3124 3122      1    3   28    4    1   99  0.28180 0.08165 -0.05931  1.0000
  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000
  3.9170  0.0000  0.0560  0.0000  0.0000 -0.1800  0.0000  0.0000 -0.0290  0.0000
  0.0000  0.0300  0.0000  0.0000  0.0000 -0.2640  0.0000  0.0200  0.0000  0.0000
 -0.0190  0.0000  0.0000  0.0000  0.0000  0.0000
H(5HFH  )  3  2 3124 3125 3122      1    2   24    4    1   95  0.27456 0.07357 -0.04197  1.0000
  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000
  1.0440  0.0000  0.0000  0.0000  0.1820  0.0860  0.0000  0.0000  0.0000  0.0000
  0.0000  0.0000  0.0000  0.0000  0.0000  0.0000  0.0000  0.0000  0.0000  0.0000
  0.0000  0.0000  0.0000  0.0000  0.0000  0.0000
C(5HFI  )  3  1 3110 3126 3128      1    3   35    4    1  363  0.27485 0.07855 -0.03091  1.0000
  0.000000  0.000000  0.000000  0.000000  0.000000  0.000000
  4.0465  0.0000  0.0000  0.0000 -0.0810  0.0000  0.0000  0.0000  0.2750  0.0000
  0.3130  0.0000  0.0000 -0.2320  0.0000  0.0000  0.0000  0.0400  0.0000  0.0000
  0.0000  0.0000  0.0000  0.0000  0.0430  0.0000

1 个答案:

答案 0 :(得分:3)

awk 'FNR==NR      {a[NR]=$0; next} 
     /^H|C|O|N|S/ {split(a[++i], b); $14=b[1]; $15=b[2]; $16=b[3]}
1' frac file

首先通过frac并存储行,第二次通过file并替换您想要的内容。

我假设frac中的行数与file中的匹配行数相同。