awk 명령을 사용하여 한 파일의 열을 ID와 일치하는 다른 파일의 열로 병합하려면 어떻게 해야 합니까?

awk 명령을 사용하여 한 파일의 열을 ID와 일치하는 다른 파일의 열로 병합하려면 어떻게 해야 합니까?

다음과 같은 파일이 있습니다.

FID IID Country Smoker Cancer_Type Age
1 RQ34365-4 1 2 1 70 
2 RQ22067-0 1 3 1 58
3 RQ22101-7 1 1 1 61
4 RQ14754-1 2 3 1 70

또 다른 파일에는 16개의 열이 있습니다.

Id pc1 pc2 pc3 pc4 pc5 pc6 pc7 pc8 pc9 pc10 pc11 pc12 pc13 pc14 pc15
RQ22067-0 -0.0731995 -0.0180998 -0.598532 0.0465712 0.152631 1.3425 -0.716615 -1.15831 -0.477422 0.429214 -0.5249 -0.793306 0.274061 0.608845 0.0224554
RQ34365-4 -1.39583 -0.450994 0.156784 2.28138 -0.259947 2.83107 0.335012 0.632872 1.03957 -0.53202 -0.162737 -0.739506 -0.040795 0.249346 0.279228
RQ34616-4 -0.960775 -0.580039 -0.00959004 2.28675 -0.295607 2.43853 -0.102007 1.01575 -0.083289 1.0861 -1.07338 1.2819 -0.132876 -0.303037 0.9752
RQ34720-1 -1.32007 -0.852952 -0.0532576 2.52405 -0.189117 3.07359 1.31524 0.637381 -1.36214 -0.0246524 0.708741 0.502428 -0.437373 -0.192966 0.331765
RQ56001-9 0.13766 -0.3691 0.420061 -0.490546 0.655668 0.547926 -0.614815 0.62115 0.783559 -0.163262 -0.660511 -1.08647 -0.668259 -0.331539 -0.444824
RQ30197-8 -1.50017 -0.225558 -0.140212 2.02165 0.770034 0.158586 -0.445182 -0.0443478 0.655487 0.972675 -0.24107 -0.560063 -0.194244 0.842883 0.749828
RQ14799-8 -0.956607 -0.686249 -0.478327 1.68038 -0.0311278 2.64806 -0.0842574 0.360613 -0.361503 -0.717515 0.227098 -0.179404 0.147733 0.907197 -0.401291
RQ14754-1 -0.226723 -0.480497 -0.604539 0.494973 -0.0712862 -0.0122033 1.24771 -0.274619 -0.173038 0.969016 -0.252396 -0.143416 -0.639724 0.307468 -1.22722
RQ22101-7 -0.47601 0.0133572 -0.689546 0.945925 1.51096 -0.526306 -1.00718 -0.0973459 -0.0701914 -0.710037 -0.9271 -0.953768 1.22585 0.303631 0.625667

첫 번째 파일에 두 번째 파일을 추가하고 싶습니다. -> 첫 번째 파일의 IID와 두 번째 파일의 IID가 정확히 일치합니다. 원하는 출력은 다음과 같습니다.

FID IID Country Smoker Cancer_Type Age pc1 pc2 pc3 pc4 pc5 pc6 pc7 pc8 pc9 pc10 pc11 pc12 pc13 pc14 pc15
1 RQ34365-4 1 2 1 70 -1.39583 -0.450994 0.156784 2.28138 -0.259947 2.83107 0.335012 0.632872 1.03957 -0.53202 -0.162737 -0.739506 -0.040795 0.249346 0.279228
2 RQ22067-0 1 3 1 58 -0.0731995 -0.0180998 -0.598532 0.0465712 0.152631 1.3425 -0.716615 -1.15831 -0.477422 0.429214 -0.5249 -0.793306 0.274061 0.608845 0.0224554
3 RQ22101-7 1 1 1 61 -0.47601 0.0133572 -0.689546 0.945925 1.51096 -0.526306 -1.00718 -0.0973459 -0.0701914 -0.710037 -0.9271 -0.953768 1.22585 0.303631 0.625667
4 RQ14754-1 2 3 1 70 -0.226723 -0.480497 -0.604539 0.494973 -0.0712862 -0.0122033 1.24771 -0.274619 -0.173038 0.969016 -0.252396 -0.143416 -0.639724 0.307468 -1.22722

저는 awk를 처음 접했고 실제로 무엇을 해야할지 모르겠습니다. 어떤 도움이라도 대단히 감사하겠습니다. 나는 다음 명령을 사용했습니다.

awk 'NR == FNR{a[$2] = $0; next} $1 in a {print a[$1], $0}' file 1 file 2

하지만 내 출력이 잘못되었습니다. 파일 1을 추가하지 않고 두 번째 파일을 인쇄했습니다. 기본적으로 파일 1과 파일 2가 ID 일치를 통해 함께 연결되기를 원합니다.

답변1

awk '#set field separators for in- and output to single space
     BEGIN {FS=OFS=" "}
     #save header line from file 1
     NR==1 {head1=$0 ; next}
     #for other lines in file1: save line into array with ID as key
     NR==FNR  {line[$2]=$0}
     #get header line of file 2, remove doubled ID entry and print
     FNR==1 {$1="" ; printf "%s%s\n",head1,$0 ; next}
     #for other lines in file 2: if ID matches any key in array line
     #print the array entry and the line from file2 with the ID removed
     NR!=FNR && $1 in line  {a=$1 ; $1="" ; printf "%s%s\n",line[a],$0}
     ' file1 file2 | sort -n

확인하다이것소개 awk.

관련 정보