2つのファイルを比較して一致する値を取得しようとしています。私は次のコマンドを試しました。
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
ja:K00012 UGDH; UDPグルコース6-脱水素酵素
ja:K00024 mdh;リンゴ酸脱水素酵素
ja:K00027 ME2;
期待される出力
K00012 ja:K00012 UGDH; UDPグルコース6-脱水素酵素
K00012 ja:K00012 UGDH; UDPグルコース6-脱水素酵素
K00024 ja:K00024 mdh;マレート
脱水素酵素
K00024 MDH; DH;マレート脱水素酵素
K00027 ja:K00027 ME2;マレート脱水素酵素(
オキサロアセテートの脱カルボキシル化)K00027 ja:K00027 ME2。マレート脱水素酵素(オキサロアセテートの脱カルボキシル化)K00027 ja:K00027 ME2。
アロ酢酸の脱カルボキシル化)
答え1
値K??????
は2番目のファイルで一意であるため、を使用できます。awk
まず、2番目のファイルを読み取り、各行を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
2番目のファイルをsed
スクリプトに変換し、それを使用して最初のファイルを処理することもできます。
sed 's|.*:\([^[:blank:]]*\)[[:blank:]].*|/\1/c\\\
\1 &|' File2_.txt | sed -f - File1_.txt
これは、2番目のファイルに:
(最後に)1つだけがあり、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
より良い結果を得るには、このスクリプトを自由に調整してください。