파일 1의 열 1이 파일 2의 열 5와 일치하면 파일 1의 열 1을 파일 2의 열 1로 바꿔야 합니다.
파일 1
ENSG00000237491 1 714150 745440 2 1 143562
ENSG00000230092 1 736259 745541 2 1 143562
ENSG00000269831 1 738532 739137 2 1 143562
ENSG00000187634 1 860260 879955 26 20 130731
파일 2
AL669831.1 1 738532 739137 ENSG00000269831
SAMD11 1 860260 879955 ENSG00000187634
RP11-206L10.9 1 714150 745440 ENSG00000237491
RP11-206L10.8 1 736259 745541 ENSG00000230092
출력은 다음과 같아야합니다
RP11-206L10.9 1 714150 745440 2 1 143562
RP11-206L10.8 1 736259 745541 2 1 143562
AL669831.1 1 738532 739137 2 1 143562
SAMD11 1 860260 879955 26 20 130731
아래 코드를 시도했지만 작동하지 않고 출력이 인쇄되지 않으며 오류 없이 즉시 중지됩니다.
awk 'NR==FNR{a[$1]=$1;next} $5 in a {$1=a[$1];print}' FS='\t' OFS='\t' file1.txt file2.txt > output.txt
감사합니다!
답변1
file1.txt
위와 같이 파일과 편집된 버전을 사용하여 file2.txt
(그래서 file1.txt에 $5가 있는 file2.txt에 일부 입력 행이 있음):
AL157931.1 13 23551994 23552136 ENSG00000237491
HMGA1P6 13 23708313 23708703 ENSG00000230092
RNY3P4 13 23726725 23726825 ENSG00000207157
file1.txt를 읽기 전에 file2.txt를 읽으면 다음과 같은 출력을 얻을 수 있습니다.
$ awk 'BEGIN {FS=OFS="\t"}
NR==FNR {a[$5]=$1; next};
$1 in a {$1=a[$1];print}' file2.txt file1.txt
AL157931.1 1 714150 745440 2 1 143562
HMGA1P6 1 736259 745541 2 1 143562
이것이 작동하는 방식의 핵심은 키가 file2의 $5이고 값이 동일한 파일의 $1인 연관 배열을 구축하려고 한다는 점을 깨닫는 것입니다.
그런 다음 file1을 반복할 때 $1이 배열의 키인지 확인합니다. 그렇다면 $1을 일치하는 값(즉, file2의 해당 $1)으로 바꾸고 해당 행을 인쇄합니다.