在中,file 1
我需要hdu
在第2列(或第HX*
5列)中找到包含字符串的行,然后file 2
用中的第5列的值替换第2列中的值file 1
。
文件1:
64 ha 1 LIG H64 64 0.000000 12.0100 c 0.637086 12.0100
65 du 1 LIG XX65 65 0.000000 16.0000 o -0.547014 16.0000
66 du 1 LIG XX66 66 0.000000 16.0000 oh -0.611114 16.0000
67 hdu 1 LIG HX67 67 0.000000 1.0080 hc 0.090186 1.0080
68 hdu 1 LIG HX68 68 0.000000 1.0080 hc 0.090186 1.0080
文件2:
1LIG H64 64 2.06144000 1.94117000 2.65125000
1LIG XX65 65 2.14737000 1.92392000 2.73722000
1LIG XX66 66 1.98154000 2.05095000 2.64407000
1LIG XX67 67 2.21440000 1.72650000 2.55862000
1LIG XX68 68 2.22046000 1.85502000 2.43909000
在给定的情况下,我需要更换XX67
用HX67
,并XX68
用HX68
,使输出为:
1LIG H64 64 2.06144000 1.94117000 2.65125000
1LIG XX65 65 2.14737000 1.92392000 2.73722000
1LIG XX66 66 1.98154000 2.05095000 2.64407000
1LIG HX67 67 2.21440000 1.72650000 2.55862000
1LIG HX68 68 2.22046000 1.85502000 2.43909000
我最好的猜测是命令
awk 'FNR==NR && $2=="hdu" {x=$1;y=$5} NR!=FNR { if ($3==x) {$2=y} print}' file1 file2
但它仅替换了最后一次出现的情况。
那是因为您的x
和y
值被覆盖,因此只有file1的最后一行会保留。使用数组尝试一下单线的这种小改编:
awk 'FNR==NR && $2=="hdu" {y[$1] = $5} NR!=FNR { if ($3 in y) {$2 = y[$3]} print} ' file1 file2
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句