두 개의 파일이 있습니다. file1의 일부 이름은 file2에도 있습니다. 첫 번째 파일의 $3와 두 번째 파일의 $2가 일치한 후 두 번째 파일의 $3 및 $4 열을 첫 번째 파일에 할당하려면 어떻게 해야 합니까? 매우 감사합니다.
file1.dat
1 2.5 S1 2.5
1 54 S2 2.5
2 465 S3 1.4
2 65 D 4.2
3 465 P 4.2
3 897 L 4.2
4 12 H_L 4.2
4 46 H_M 4.2
file2.dat
1 S1 2.55 4
2 S2 2.56 6
3 S3 1.44 8
4 D 4.22 7
5 H_L 4.2 6
6 H_M 4.2 65
원하는 출력:
1 2.5 S1 2.5 2.55 4
1 54 S2 2.5 2.56 6
2 465 S3 1.4 1.44 8
2 65 D 4.2 4.22 7
3 465 P 4.2 - -
3 897 L 4.2 - -
4 12 H_L 4.2 4.2 6
4 46 H_M 4.2 4.2 65
답변1
이 문제는 여기서 수없이 해결되었습니다. 어때요?
awk 'NR==FNR {Tmp[$2] = $3 FS $4; next} ($3 in Tmp) {print $0 FS Tmp[$3]}' file2 file1
1 2.5 S1 2.5 2.55 4
1 54 S2 2.5 2.56 6
2 465 S3 1.4 1.44 8
2 65 D 4.2 4.22 7
4 12 H_L 4.2 4.2 6
4 46 H_M 4.2 4.2 65
file2의 필수 필드를 index 의 배열로 읽은 다음 file1이 배열의 인덱스와 일치하면 resp를 추가합니다 $2
. $3
요소를 에 추가 $0
하고 인쇄합니다.
일치하지 않는 두 줄의 경우 다음과 같이 시도해 보세요.
awk 'NR==FNR {Tmp[$2] = $3 FS $4; next} ($3 in Tmp) {print $0 FS Tmp[$3]; next} {print $0, "- -"}' file2 file1
1 2.5 S1 2.5 2.55 4
1 54 S2 2.5 2.56 6
2 465 S3 1.4 1.44 8
2 65 D 4.2 4.22 7
3 465 P 4.2 - -
3 897 L 4.2 - -
4 12 H_L 4.2 4.2 6
4 46 H_M 4.2 4.2 65