我正在尝试使用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
答案 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
中的匹配行数相同。