두 파일의 열 일치

두 파일의 열 일치

두 개의 파일이 있습니다. 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

관련 정보