통신

comm
통신
Comm-example.png
사용 예comm명령어
원저작자리 E. 맥마흔
개발자AT&T Bell Laboratories, Richard Stallman, David MacKenzie
초기 릴리즈1973년 11월, 48년 전(1973년-11년)
기입처C
운영 체제Unix, Unix like, Plan 9, Inferno
플랫폼크로스 플랫폼
유형명령어
면허증.코어 유틸리티: GPLv3+
계획 9: MIT 라이선스

Unix 계열컴퓨터 운영체제에서 comm 명령어는 공통 행과 구별되는 행의 두 파일을 비교하기 위해 사용되는 유틸리티입니다.commPOSIX 표준에 지정되어 있습니다.1980년대 중후반부터 Unix 계열 운영체제에서 널리 이용되고 있습니다.

역사

Lee E. McMahon에 의해 쓰여진 comm버전 4 [1]Unix에서 처음 등장했습니다.

GNU coreutils에 번들된 Comm 버전은 Richard Stallman과 David MacKenzie에 [2]의해 작성되었습니다.

사용.

comm은 입력으로서 텍스트 행으로 간주되는2개의 파일을 읽습니다.comm을 지정하면 3개의 열이 포함된 파일 1개가 출력됩니다.첫 번째 두 개의 열에는 첫 번째 파일과 두 번째 파일에 각각 고유한 행이 포함됩니다.마지막 열에는 두 개의 공통 행이 있습니다.이 기능은 diff와 비슷합니다.

열은 보통 <탭> 문자로 구분됩니다.입력 파일에 구분 문자로 시작하는 줄이 포함되어 있으면 출력 열이 모호해질 수 있습니다.

효율성을 위해 comm의 표준 구현에서는 두 입력 파일이 동일한 라인 대조 순서로 정렬되어 사전순으로 정렬될 것으로 예상합니다. 목적으로 sort(Unix) 명령을 사용할 수 있습니다.

comm 알고리즘현재 로케일의 대조 시퀀스를 사용합니다.파일 내의 행이 모두 현재 로케일에 따라 대조되지 않으면 결과는 정의되지 않습니다.

반품코드

diff와는 달리 comm으로부터의 리턴 코드는 두 파일의 관계에 관한 논리적인 의미는 없습니다.리턴 코드가 0이면 성공, 리턴 코드가 0이면 처리 중 오류가 발생했음을 나타냅니다.

$cat foo 사과 바나나 가지 $cat bar 사과 바나나 애호박 $comm foo bar 사과 바나나 가지 애호박

이것은 두 파일 모두 바나나가 하나이지만 에만 두 번째 바나나가 있음을 나타냅니다.

자세한 것은, 출력 파일의 외관은 다음과 같습니다.열은 선행 탭 문자 수로 해석됩니다.\t는 탭 문자를 나타내고 \n은 줄바꿈을 나타냅니다(에스케이프 문자 #프로그래밍데이터 형식).

0 1 2 3 4 5 6 7 8 9
0 \t \t a p p l e \n
1 \t \t b a n a n a \n
2 \t b a n a n a \n
3 e g g p l a n t \n
4 \t z u c c h i n i \n

diff와의 비교

일반적으로 diffcomm보다 더 강력한 유틸리티입니다.스크립트에서 사용하기에 가장 적합한 것은 간단한 comm입니다.

comm과 diff의 주요 차이점은 정렬 전에 행의 순서에 대한 정보를 폐기한다는 것입니다.

comm과 diff의 작은 차이점은 comm은 두 파일 간에 행이 변경되었음을 나타내지 않는다는 입니다.행은 "from file #1", "from file #2" 또는 "both" 열에 표시됩니다.이것은 두 선이 미묘한 차이만 있어도 다른 것으로 간주하고 싶을 때 유용합니다.

기타 옵션

comm에는 세 개의 열 중 하나를 억제하는 명령줄 옵션이 있습니다.이것은 스크립팅에 도움이 됩니다.

표준 입력에서 한 파일(둘 다 아님)을 읽는 옵션도 있습니다.

한계

다음 출력 행을 쓰기 전에 라인 비교 중에 각 입력 파일에서 최대 라인 전체를 버퍼링해야 합니다.

일부 구현에서는 readlinebuffer() 함수를 사용하여 행을 읽습니다.이 함수는 시스템메모리가 충분한 경우 행 길이 제한을 두지 않습니다.

다른 실장에서는 fgets() 함수의 행을 읽습니다.이 함수에는 고정 버퍼가 필요합니다.이러한 실장에서는, 대부분의 경우, POSIX 매크로 LINE_MAX 에 따라서 버퍼의 사이즈가 정해집니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ McIlroy, M. D. (1987). A Research Unix reader: annotated excerpts from the Programmer's Manual, 1971–1986 (PDF) (Technical report). CSTR. Bell Labs. 139.
  2. ^ "Comm(1): Compare two sorted files line by line - Linux man page".

외부 링크