あるファイルから文字列を見つけ、別のファイルで使用する

あるファイルから文字列を見つけ、別のファイルで使用する

列2(または列5)で文字列を含む行を見つけて、列2の値を列5の値に置き換える必要がfile 1あります。hduHX*file 2file 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出力は次のとおりです。HX67XX68HX68

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

ただし、これは最後の発生のみを置き換えます。

答え1

これはx、合計y値が上書きされ、file1の最後の行だけが残るためです。 1行のコードを少し変更して配列を試してみてください。

awk 'FNR==NR && $2=="hdu" {y[$1] = $5} NR!=FNR { if ($3 in y) {$2 = y[$3]} print} ' file1 file2

関連情報