예를 들어 A와 B 파일이 행단위로 구분된 텍스트 혹은 csv 파일이라고 가정해보자.
여기서 두 파일간 중복되는 값을 제외하고(혹은 그 반대로 중복되는 값만) 가져오고 싶은 경우가 있을 것이다.
그럴 때 사용할 수 있는 명령어가 바로 comm과 sort 명령어이다.
comm -12 <(sort 파일1.txt) <(sort 파일2.txt)
예를 들업 A 라는 파일의 내용이 다음과 같고
01IbgCB0r6diqm80GYFKEL 01RgVMR8xsRW9lxiie4UTm 0F3WkbeUFjrvipGQ83fgm 0FdwtbjVsUk8AfcGauMz3 0LQUvvY5sDgCkh6bEjoZs 0UbPrLWMwwU2xPAKSCbAm (B에 없는 행) 0svP3CQYcs9KVNb6hduu8 (B에 없는 행) 10C7Cb1cYOvD9uM3Q0GgZa (B에 없는 행) 10EVTVrYDdDxgK5nUvdbDC (B에 없는 행) 10SskUn72Sr7jluedLmWyB (B에 없는 행)
B라는 파일의 내용이 다음과 같을 때
01IbgCB0r6diqm80GYFKEL 01RgVMR8xsRW9lxiie4UTm 0F3WkbeUFjrvipGQ83fgm 0FdwtbjVsUk8AfcGauMz3 0LQUvvY5sDgCkh6bEjoZs 10nQKAjqJlN093aqfNykWf (A에 없는 행) 11HmzBHrJtkxp39XCh4hWH (A에 없는 행) 11cdU0POQiVZ7KwHUx0McX (A에 없는 행)
결과를 출력해보자. 그러면 중복되는 값들은 모두 제외되고 출력되는 걸 확인 할 수 있다.
0UbPrLWMwwU2xPAKSCbAm (B에 없는 행) 0svP3CQYcs9KVNb6hduu8 (B에 없는 행) 10C7Cb1cYOvD9uM3Q0GgZa (B에 없는 행) 10EVTVrYDdDxgK5nUvdbDC (B에 없는 행) 10SskUn72Sr7jluedLmWyB (B에 없는 행) 10nQKAjqJlN093aqfNykWf (A에 없는 행) 11HmzBHrJtkxp39XCh4hWH (A에 없는 행) 11cdU0POQiVZ7KwHUx0McX (A에 없는 행)
참고로 comm 명령어의 옵션은 다음과 같다.
옵션 | 내용 |
-1 | file1에 있는 행만 출력한다 |
-2 | file2에 있는 행만 출력한다 |
-3 | file1과 file2에 둘다 있는 행을 출력한다 |
-i | 행 비교시 Case(대,소문자)구분의 여부 |
참고로 comm 명령어 이외에도 비슷한 역할을 수행하는 diff라는 명령어도 존재한다.
요약
요약: comm과 sort 명령어를 사용하자