서로 다른 두 파일의 두 필드 비교

서로 다른 두 파일의 두 필드 비교

file1나는

1023M  BLD
123G   DEV
945K   Deployment
4899   INT

file2나는

1.2G   BLD
123G   DEV
345M   Deployment
499M   INT

의 첫 번째 필드 와 의 첫 번째 필드를 file1비교 하고 싶습니다 file2. 일치하지 않는 필드만 인쇄하고 싶습니다.file3

답변1

샘플 파일을 사용하면 다음 명령을 사용하여 원하는 결과를 얻을 수 있습니다.

$ paste file1 file2 | awk '$1!=$3'

샘플 출력은 다음과 같습니다

1023M  BLD  1.2G   BLD
945K   Deployment   345M   Deployment
4899   INT  499M   INT

file3에 쓰려면 파일로 리디렉션을 사용하세요.

답변2

SQL 용어로 생각하고 싶다면 반드시 '라는 도구를 사용해 보세요.':

$ q 'SELECT f1.*, f2.* FROM file1 f1 JOIN file2 f2 ON f1.c2 = f2.c2 WHERE f1.c1 != f2.c1';

SQL 쿼리에 익숙하다면 더 명확하고 이해하기 쉬울 것입니다.

답변3

덜 해킹된 솔루션이라고 생각되면 diff나 sdiff를 사용하고 필요한 경우 출력을 조작하기 위해 awk 또는 이와 유사한 것을 사용합니다.

➜  ~  sdiff 1.txt 2.txt
1023M  BLD                 |  1.2G   BLD
123G   DEV                    123G   DEV
945K   Deployment          |  345M   Deployment
4899   INT                 |  499M   INT

그러면 파이프 기호 뒤에 있는 다양한 값을 볼 수 있습니다.

위의 답변에 표시된 대로 해당 항목만 Grep하십시오.

➜  ~  sdiff 1.txt 2.txt | grep '|'
1023M  BLD                 |  1.2G   BLD
945K   Deployment          |  345M   Deployment
4899   INT                 |  499M   INT

나는 개인적으로 이것이 더 매끄러운 해결책이라고 생각합니다. 리디렉션하려면 다음을 수행하십시오.

➜  ~  sdiff 1.txt 2.txt | grep '|' > 3.txt

diff 및 grep을 사용하여 첫 번째 행과 다른 필드만 가져올 수도 있습니다.

➜  ~  diff 1.txt 2.txt | grep "^>"
> 1.2G   BLD
> 345M   Deployment
> 499M   INT

관련 정보