두 파일의 내용을 병합하고 열의 내용을 비교합니다.

두 파일의 내용을 병합하고 열의 내용을 비교합니다.

두 파일의 내용을 병합하는 데 문제가 있습니다.

파일 1:

873 1.1.1.1 
1033 99.99.99.10
1108 78.2.204.174
1257 78.2.8.181

파일 2:

test1 78.2.8.181 p6
test2 99.99.99.10 p9
test7 1.1.1.1 p10
test8 78.2.204.174 p4

공유 열이 두 번째이고 문제의 행에 맞게 비교되어야 한다는 점을 고려하여 아래와 같이 두 파일을 하나로 병합하고 싶습니다.

873  1.1.1.1      test7 p10
1033 99.99.99.10  test2 p9
1108 78.2.204.174 test8 p4
1257 78.2.8.181   test1 p6

awk나는 이것을 성공하지 않고 몇 가지 시도했습니다 .

답변1

join이런 목적 으로 사용할 수 있습니다 .

먼저 두 번째 열을 키로 사용하여 두 파일을 모두 정렬해야 합니다.

$ sort -t' ' -k 2,2 a > as
$ sort -t' ' -k 2,2 b > bs

다음으로 이어진다:

$ cat as
873 1.1.1.1
1108 78.2.204.174
1257 78.2.8.181
1033 99.99.99.10
$ cat bs
test7 1.1.1.1 p10
test8 78.2.204.174 p4
test1 78.2.8.181 p6
test2 99.99.99.10 p9

그런 다음 실제로 가입하십시오.

$ join -t' ' -j2 as bs
1.1.1.1 873 test7 p10
78.2.204.174 1108 test8 p4
78.2.8.181 1257 test1 p6
99.99.99.10 1033 test2 p9

답변2

join -j2 <(sort -k2 file1) <(sort -k2 file2) -o 1.1,1.2,2.1,2.3 | column -t

산출

873   1.1.1.1       test7  p10
1108  78.2.204.174  test8  p4
1257  78.2.8.181    test1  p6
1033  99.99.99.10   test2  p9

답변3

awk를 사용하는 한 가지 방법:

$ awk 'NR==FNR{a[$2]=$1 FS $3;next}{print $0 FS a[$2] }' file2 file1
873 1.1.1.1  test7 p10
1033 99.99.99.10 test2 p9
1108 78.2.204.174 test8 p4
1257 78.2.8.181 test1 p6

파일 f2는 배열에 로드됩니다. 여기서 두 번째 필드는 인덱스이고 배열 값은 file2의 세 번째와 네 번째 필드의 조합입니다. file1이 처리되면 배열에 저장된 값과 함께 전체 줄이 인쇄됩니다.

관련 정보