중복을 무시하지 않고 두 파일을 비교하고 일치하는 값을 인쇄합니다.

중복을 무시하지 않고 두 파일을 비교하고 일치하는 값을 인쇄합니다.

두 파일을 비교하여 일치하는 값을 얻으려고 합니다. 나는 다음 명령을 시도했습니다.

grep -Fwf file_1.txt file_2.txt > matched_output.txt

그러나 이 스크립트는고유한 값만 추출.

File_1.txt

K00012 
K00012
K00024
K00024
K00024
K00027
K00027
K00027
K00027

File_2.txt

ko:K00012 UGDH; UDP 포도당 6-탈수소효소 
ko: K00024 mdh; 말산 탈수소효소
ko: K00027 ME2;

예상 출력

K00012 ko:K00012 UGDH; UDP 포도당 6-탈수소효소 
K00012 ko: K00012 UGDH; UDP 포도당 6-탈수소효소
K00024 ko: K00024 mdh; 말레이트
탈수소효소
K00024 MDH; DH; 말레이트 탈수소효소
K00027 ko:K00027 ME2; 말레이트 탈수소효소(
옥살로아세테이트의 탈카복실화) K00027 ko:K00027 ME2; 말레이트 탈수소효소(옥살로아세테이트의 탈카복실화) K00027 ko:K00027 ME2;
알로아세트산 탈카르복실화 )

답변1

K??????은 두 번째 파일에서 고유하므로 를 사용할 수 있습니다. awk먼저 두 번째 파일을 읽고 각 줄을 index 의 배열에 저장한 K??????다음 첫 번째 파일을 처리하고 K??????배열의 각 파일에 대해 값과 해당 줄을 인쇄합니다. :

awk 'NR==FNR{split($1, a, ":"); u=a[2];b[u]=$0; next}
{if ($0 in b) {print $0, b[$0]}}' File2_.txt File1_.txt

또는 sed두 번째 파일을 sed스크립트로 변환하고 이를 사용하여 첫 번째 파일을 처리할 수 있습니다.

sed 's|.*:\([^[:blank:]]*\)[[:blank:]].*|/\1/c\\\
\1 &|' File2_.txt | sed -f - File1_.txt

이는 두 번째 파일에 :(끝에 ) 하나만 있고 ko백슬래시가 없으며 K??????슬래시를 포함할 수 없다고 가정합니다.

답변2

while read line
do
    grep -q "$line" File_2.txt
    if [ "$?" -eq "0" ]; then
         echo -n "$line "
         grep "$line" File_2.txt
    fi
done < File_1.txt

더 나은 결과를 얻으려면 이 스크립트를 자유롭게 조정하세요.

관련 정보