한 파일에서 문자열을 찾아 다른 파일에서 사용

한 파일에서 문자열을 찾아 다른 파일에서 사용

열 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의 마지막 줄만 남게 되기 때문입니다. 한 줄의 코드를 약간 수정하여 배열을 사용해 보십시오.

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

관련 정보