2012-02-08 6 views
1

나는 두 개의 파일을 비교하기 위해 통신 명령을 사용했지만, 나는 세 번째 파일에 파이프 그것을 드릴 수 없습니다 :comm 출력을 파일로 파이프하는 방법은 무엇입니까?

comm file1 file2 > file3 

comm: file 1 is not in sorted order 
comm: file 2 is not in sorted order 

가 어떻게 이렇게 할 수 있습니까? 파일이 이미 정렬되어 있습니다.

(통신 FILE1 파일 2 작품 밖으로 인쇄 그것을)

시료 입력 :
FILE1 :

21 
24 
31 
36 
40 
87 
105 
134 
... 

파일 2 :

10 
21 
31 
36 
40 
40 
87 
103 
... 

통신 FILE1 파일 2가 :

작동
comm file1 file2 > file3 

comm: file 1 is not in sorted order 
comm: file 2 is not in sorted order 
+0

이러한 메시지를 생성하는 샘플 입력을 제공 할 수 있습니까? – Johnsyweb

+0

'comm -3 file1 file2'는 stdout에서 무엇을 보여줍니까? – anubhava

답변

4

숫자로 정렬했습니다. comm은 어휘 적으로 정렬 된 파일에서 작동합니다. file2에서 예를 들어

는 라인 (103)은 라인 21..87와 순서가 극적이다. 파일은 ' 일반 sort'이어야합니다. '이어야합니다. 당신이 (4 bash 가지고있는 경우에

.x)를, 당신은 공정 대체를 사용할 수 있습니다

comm <(sort file1) <(sort file2) 

이 두 명령을 실행하고 comm 프로세스가 파일 인 것처럼 자신의 표준 출력을 읽고 얻는 것을 보장한다.

그 실패 :

(
sort -o file1 file1 & 
sort -o file2 file2 & 
wait 
comm file1 file2 
) 

이 동시에 정렬 된 파일을 얻기 위해 병렬 처리를 사용합니다. 서브 쉘 ((...))은 다른 i 그라운드 프로세스가 완료되기를 기다리지 않게합니다.

1

sort 프로그램을 사용하여 먼저 파일을 정렬해야합니다.

+0

죄송합니다. 언급 한 것을 잊어 버렸습니다. 이미 – user794479

+2

comm의'--nocheck-order' 스위치를 사용합니다.하지만'comm '은 그렇지 않은 이유를 찾으려고합니다. – Joni

+0

, 그리고 나는 아직도 확실하지 않다! – user794479

1

보십시오 :

합니다 ( -n 옵션없이) commsort 같은 명령을 것입니다, 기대 (사전에 같은) 사전 식 분류 샘플 데이터가 은하지 예를 들어 100해야
sort -o file1 file1 
sort -o file2 file2 
comm file1 file2 > file3 
+0

죄송합니다, 언급 한 것을 잊어 버렸습니다. 그들은 이미 정렬되어 있습니다. – user794479

+1

@ user794479 : 왜 질문에 명시 적으로 언급합니까? : comm : 파일 1은 정렬 된 순서가 아닙니다. comm : 파일 2는 정렬 된 순서가 아닙니다. 시도해 보면 출력물이 – Mithrandir

+0

입니다.> file3 – user794479

2

(20) 당신이 출력을 리디렉션하지 않을 경우 오류가 터미널의 출력 라인과 혼합 될 수 있기 때문에 단순히, 오류 메시지를 몰래되지 않도록하기 전에 수?

+0

+1 : 나는 이것이 옳은 대답이라고 생각합니다. (그리고 내 글을 입력하는 동안 게시했습니다.) – Johnsyweb

1

나는 당신과 같은 결과를 얻을 수 없지만, 아마도 comm의 버전이 파일이 사 전적으로 정렬되지 않습니다 불평한다. 사용자가 제공 한 입력을 사용하여 내가 ... 세 번째 열에 아니라고 놀랐다

$ comm file[12] 
     10 
       21 
24 
       31 
       36 
       40 
     40 
       87 
     103 
     ... 
105 
134 
... 

(. ...가 흥미 수를, 나는 그것이 실제 파일의 일부가 아닌 것을 알고) 그래서 시도 :

$ comm <(sort file1) <(sort file2) 
       ... 
     10 
     103 
105 
134 
       21 
24 
       31 
       36 
       40 
     40 
       87 
더 나은

하지만,> 24 (105), 맞죠?

$ comm <(sort -n file1) <(sort -n file2) 
       ... 
     10 
       21 
24 
       31 
       36 
       40 
     40 
       87 
     103 
105 
134 

나는 그것이 당신이 찾고있는 결과라고 생각합니다. 두 개의 40도 흥미 롭습니다. 다음을 제거하려는 경우 :

$ comm <(sort -nu file1) <(sort -nu file2) 
       ... 
     10 
       21 
24 
       31 
       36 
       40 
       87 
     103 
105 
134 
0

나는 commsort이라고하더라도 불평하고있는 비슷한 문제가 발생했습니다. 문제는 내가 Cygwin을 실행하고 있었고 sort이 MSDOS 버전을 가리키고 있다는 것입니다. 특정 경로 (내 경우에는 C : \ Cygwin \ bin \ sort)를 사용하여 작동했습니다.

관련 문제