에 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