2014-11-05 4 views
1

사용자 이름이 들어있는 파일 하나와 이메일이있는 사용자 이름을 가진 다른 파일을 비교해 보려는 korn 셸 스크립트를 작성하고 있습니다. 예를 들면 다음과 같습니다 :첫 번째 단어를 사용하여 두 번째 파일을 비교하고 두 번째 파일을 반환하십시오.

파일 1 :

user1 
user2 
user5 

파일 2 :

user1|email1 
user2|email2 
user3|email3 
user4|email4 
user5|email5 

같은 FILE3에 내가 일치하는 사용자 이름 만 이메일을 반환 할 수 있습니다 어쨌든 있나요? 나는 comm 명령을 사용해야 만한다고 생각하지만 정확히 어떻게 움직이는 지 모르겠습니다.

파일 3은 :

email1 
email2 
email5 

어떤 도움에 감사드립니다. 감사합니다

답변

2

또 다른 해결책 :

grep -f file_1 file_2 | cut -d '|' -f2 

그러나 GREP가 오 탐지를 찾을 수 있기 때문에 강력하지 않습니다. 파일 형식을 강력하게하려면 다음과 같이 파일 1을 적용하십시오.

\[email protected] 
\[email protected] 
\[email protected] 

대신 프로그램 단위로 위협 파일을 위협해야합니다.

+1

한 또 다른 방법이 더 안전이 필드 구분자를 설정하기를 "|" grep에 -w (정확한 단어 일치)를 추가하십시오. – Ajay

+0

답장을 보내 주셔서 감사합니다. 그러나 grep을 -f와 함께 실행하려고하면 불법 옵션으로 간주됩니다. -w를 사용하면 두 파일을 모두 통과하며 grep은 각 행을 열 수 없다고 말합니다. – VarmintCong

+0

man grep을 실행하고 사용중인 grep 버전이 -f 옵션을 허용하는지 확인하십시오. 광산 grep 허용 grep -wf file_1 file_2 | cut -d '|' -f2 – Ajay

1

적절한 솔루션은 join과 같다 :

join -t '|' file_1 file_2 | cut -d '|' -f2 
+0

왜 내가 여기에 합류 할 지 확신하지 못합니다. file2의 문자열과 file1의 문자열을 비교하려고하면 comm 또는 grep을 사용해야 할 것입니다. – VarmintCong

관련 문제