아래와 같이 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