awk를 사용하여 열 일치 및 교체

awk를 사용하여 열 일치 및 교체

파일 1의 열 1이 파일 2의 열 2와 일치하면 파일 2의 열 13을 파일 1의 열 2로 바꿔야 합니다.

파일 1

AAAA00000687697 HPNMS
AAAA00000693037 GER112
AAAA00000349750 FRA0158

파일 2

585     AAAA00000687697 1    +       11868   14409   14409   14409   3       11868,12612,13220,      12227,12721,14409,      0       BBBB00000223972 none    none    -1,-1,-1,
585     AAAA00000693037 1    +       11871   14412   14412   14412   3       11871,12612,13224,      12227,12721,14412,      0       BBBB00000223972 none    none    -1,-1,-1,
585     AAAA00000349750 1    +       11873   14409   14409   14409   4       11873,12594,13402,13660,        12227,12721,13655,14409,        0       BBBB00000223972 none    none    -1,-1,-1,-1,

출력은 다음과 같아야합니다

585     AAAA00000687697 1    +       11868   14409   14409   14409   3       11868,12612,13220,      12227,12721,14409,      0       HPNMS           none    none    -1,-1,-1,
585     AAAA00000693037 1    +       11871   14412   14412   14412   3       11871,12612,13224,      12227,12721,14412,      0       GER112          none    none    -1,-1,-1,
585     AAAA00000349750 1    +       11873   14409   14409   14409   4       11873,12594,13402,13660,        12227,12721,13655,14409,        0       FRA0158 none    none    -1,-1,-1,-1,

나는 다음 코드를 시도했다

 awk 'NR==FNR{a[$1]=$2;next} $2 in a {$13=a[$1];print}' FS='\t' OFS='\t' file1.txt file2.txt  > output.txt

열 13이 비어 있는 파일 2를 인쇄합니다.

a[$1]만 인쇄하려고 하면 빈 파일이 인쇄됩니다. 첫 번째 중괄호에서 다음 부분을 제거하면 a[$1]만 인쇄됩니다. 왜 배열을 저장하는 데 문제가 있는지 모르겠습니다.

답변1

가능한 경우 $13배열 문자열로 바꾸십시오.a[$2]

awk 'NR==FNR{a[$1]=$2;next}($2 in a){$13=a[$2]}1' file1 file2 

관련 정보