2010-05-14 3 views
10

두 개의 텍스트 파일을 비교하여 linux 명령을 사용하여 다음 출력을 얻으려면 어떻게해야합니까? 감사.두 파일을 비교하고 같은 줄의 출력을 얻습니다.

파일 1 :

site110 
site120 

파일 2 (업데이트) :

domain1.com - site110 
domain2.com - site111 
domain3.com - site112 
domain4.com - site113 
domain5.com - site120 
domain6.com - site1201 
domain7.com - site1202 

출력 :

domain1.com - site110 
domain5.com - site120 

내가 사용하는 경우 :

grep -f file1 file2 

출력은 다음과 같습니다.

domain1.com - site110 
domain5.com - site120 
domain6.com - site1201 
domain7.com - site1202 

마지막 두 줄은 내가 원하는 것이 아닙니다. 감사.

+0

"[SOLVED]"를 추가 할 필요는 없습니다. 시스템에 고유 한 표시기가 있습니다. –

+0

감사합니다. 나는 SO 시스템을 좋아한다. :) – garconcn

+0

'grep -f'는 여기서도 작동하지 않지만'-w'를'grep' 명령에 추가하면 작동합니다. – Thor

답변

13

:

따라서
-f FILE, --file=FILE 
      Obtain patterns from FILE, one per line. The empty file 
      contains zero patterns, and therefore matches nothing. (-f is 
      specified by POSIX.) 

:

grep -f file1 file2 

domain1.com - site110 
domain5.com - site120 
+0

전에 grep -f file1 file2를 시도했지만 스크립트에서 작동하지 않았습니다. 나는 그것이 효과가 없다고 생각했다. 이제 스크립트를 수정했습니다. 고맙습니다. – garconcn

+0

여기서'site1201'과 일치하지만'-w'를'grep' 명령에 추가하면 작동합니다. – Thor

0

어때 대략 diff? grep manpage에서

+0

처음에는 diff가 내 문제를 해결할 수 있다고 생각했지만 사용할 옵션을 모르겠습니다. 감사. – garconcn

0

man paste을 할 수 있습니까? 일부 출력 처리가 필요할 수 있습니다.

3

comm 명령을 사용하십시오.

comm -12 < (sort file1) < (sort file2) 

이 명령은 grep -f보다 정확합니다.

+0

사랑해, 고마워! comm -12 <(ls -1 dir1/| sort) <(ls -1 dir2/| sort) 디렉토리에도 잘 작동합니다. – Nitro

1

나는 데이터베이스 조인 기능을 찾고 있다고 생각합니다. 유닉스에는 그 명령이 있습니다 : join. 당신의 경우 :

join -1 1 -2 3 -t " " -o 2.1,2.2,2.3 file1 file2 
관련 문제