여러 파일을 비교하고 공통 줄을 표시하는 방법은 무엇입니까?

여러 파일을 비교하고 공통 줄을 표시하는 방법은 무엇입니까?

아래와 같이 4개의 파일이 있습니다.

파일 1 콘텐츠(탭으로 구분, 3개 열):

applepen apple pen
strawberry straw berry

파일 2의 내용:

applepen
strawjelly

파일 3 콘텐츠(이 파일은 정렬되어 있음):

apple
fan
straw

파일 4 콘텐츠(이 파일은 정렬되어 있음):

pen
zenith

파일 1의 필드 1을 파일 2와, 파일 1의 필드 2를 파일 3과, 파일 1의 필드 3을 파일 4와 비교해야 합니다. 세 개의 일치 항목이 모두 발견되면 파일 1의 필드 1,2,3을 인쇄하고 싶습니다. 파일 1의 모든 줄에 대해 이 작업을 수행하고 싶습니다.

여기서 출력은 다음과 같아야 합니다.

applepen apple pen

grep이나 comm 또는 이와 유사한 것을 사용하여 이를 수행할 수 있는 방법이 있습니까?

답변1

이것은 작업입니다 join.

$ cat file1 
applepen    apple   pen
strawberry  straw   berry
$ cat file2
applepen
strawjelly
$ cat file3
apple
fan
straw
$ cat file4
pen
zenith
$ join file[12] | join -1 2 -o 1.1,1.2,1.3 - file3 | join -1 3 -o 1.1,1.2,1.3 - file4
applepen apple pen
$ 

공백이 아닌 탭에 정말로 관심이 있다면 를 사용하여 다시 번역할 수 있습니다 | tr ' ' '\t'.

답변2

while read -r f11 f12 f13
do
  grep -qxFe "$f11" file2 && 
  grep -qxFe "$f12" file3 && 
  grep -qxFe "$f13" file4 && 
  printf "%s\n" "$f11 $f12 $f13"
done < file1

관련 정보