How to use comm in Unix
shell 상에서 뭔가 비교할 일이 자주 생기는데 그 때마다 shell을 잘 모르니 스크립트를 만들어서 비교했습니다. 무언가 좋은 방법이 없을까 찾다가 comm 이라는 명령을 알았습니다.

제가 사용한 comm 버전은 6.10 입니다.

$ comm --version
comm (GNU coreutils) 6.10
Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Richard Stallman and David MacKenzie.


comm 은 간단히 설명하자면 newline (\n)으로 구분된 텍스트 데이터 파일을 비교하는 기능을 합니다. 조건은 비교할 파일들이 정렬되어 있어야 한다는 것입니다. (sort 등으로)

a 파일내용
1
2
3
4
5
6

b 파일내용
5
6
7
8
9
0


먼저 comm 기본적인 사용결과입니다.
a 에만 존재하는 내용이 가장 왼쪽, 둘 모두에 있는 내용이 가장 오른쪽, b 에만 존재하는 내용이 가운데의 순서로 결과가 출력됩니다.
$ comm a b
1
2
3
4
        5
        6
    7
    8
    9
    0


comm 에는 세가지 옵션이 있습니다. 1, 2,3
먼저 옵션 1 입니다. b에 속한 내용이 중복된 것, b에만 있는 것 순서로 출력됩니다.
$ comm -1 a b
    5
    6
7
8
9
0

옵션 2는 a에 속한 내용이 a에만 있는 것, 중복된 것 순서로 출력됩니다.
joo8111@joo8111-desktop:~/Documents/etc/learn_shell$ comm -2 a b
1
2
3
4
    5
    6

옵션 3은 a, b 각자에만 속한 것들을 출력합니다.
joo8111@joo8111-desktop:~/Documents/etc/learn_shell$ comm -3 a b
1
2
3
4
    7
    8
    9
    0

여러가지 옵션을 섞어 쓸 수 있습니다.
1과 3을 쓰면 1 && 3 이라고 할 수 있습니다. b에만 속한 것이 출력됩니다.
joo8111@joo8111-desktop:~/Documents/etc/learn_shell$ comm -13 a b
7
8
9
0

2와 3을 쓰면 a에만 속한 것이 출력됩니다.
joo8111@joo8111-desktop:~/Documents/etc/learn_shell$ comm -23 a b
1
2
3
4



반응형