두 파일을 비교하여 일치하는 값을 얻으려고 합니다. 나는 다음 명령을 시도했습니다.
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
더 나은 결과를 얻으려면 이 스크립트를 자유롭게 조정하세요.