grep/awk/unix를 사용하여 한 파일의 모든 줄을 다른 파일의 중복된 줄과 일치시키는 방법

grep/awk/unix를 사용하여 한 파일의 모든 줄을 다른 파일의 중복된 줄과 일치시키는 방법

파일에서 일치하는 줄을 검색하려고 하는데 "색인" 또는 검색할 일치 항목 목록이 있는 파일에도 중복 항목이 있어서 중복 항목도 인쇄하고 싶습니다.

예:

파일 1(인덱스 파일 또는 일치시킬 문자열 목록)

abc
tgf
abc
ggg
aaa
fff

파일 2(파일 1의 각 항목 내용을 검색하고 싶습니다.)

Fred   1   3   abc
Amy    2   4   ggg
Dan    5   6   tgf
Mike   9   1   fff
Steve  2   1   aaa

내가 원하는 결과는 다음과 같습니다(순서는 중요하지 않으며 모든 행과 일치하면 됩니다).

Fred   1   3   abc
Dan    5   6   tgf
Fred   1   3   abc
Amy    2   4   ggg
Steve  2   1   aaa
Mike   9   1   fff

아래와 같이 grep에 익숙하고 시도했지만 중복된 항목이 인쇄되지 않습니다.

grep -Fwf file1.txt file2.txt

Fred   1   3   abc
Amy    2   4   ggg
Dan    5   6   tgf
Mike   9   1   fff
Steve  2   1   aaa

답변1

통과하다awk

awk 'NR==FNR{A[$4]=$0;next}{print A[$1]}' file2.txt file1.txt

또는 sort다음을 통해 출력을 편집하십시오 join.

join -o 2.1 2.2 2.3 2.4 -2 4 <(sort file1.txt) <(sort -k4 file2.txt)

관련 정보