スクリプト内の2つのファイルの比較

スクリプト内の2つのファイルの比較
#!/bin/bash
while read file1 <&3; do
     while read file2 ; do       
        if [ $file1 == $file2 ] ; then
         $file1 >> /infanass/dev/admin/test/newlist.txt
        fi
    echo "$file1"
    echo "$file2"
 done 3</infanass/dev/admin/test/file2.txt
done 3</infanass/dev/admin/test/file1.txt

file1.txtから1行を読んでから、file2.txtを繰り返して一致するものがあることを確認し、それを新しいテキストファイルに書きたいと思います。

無限ループがあると思います..

答え1

より簡単な方法はどうですか?

while read line do
    grep "^$line$" file2.txt >>matches.txt
done < file1.txt

説明する:

これは行を繰り返し、その中の正確な行を見つけるfile1.txtために使用されます。行が一致する場合は、その行が再度出力され、ファイルにリダイレクト(追加)されます。grepfile2.txtgrepfile2.txtmatches.txt

スクリプトが停止した理由は、2番目のループが入力を待っているためです。最初のループで行ったように、ファイル記述子にコピーするのstdinを忘れました。いずれにせよ、追加のファイル記述子を作成する必要はありません。ループが端末の代わりにファイルから読み取られるようにリダイレクトするだけです。stdin3stdinwhile

答え2

使用comm交差点を探す:

comm -12 <(sort file1.txt) <(sort file2.txt) > newlist.txt

commでは、入力ファイルをソートする必要があります。

答え3

もっと簡単に餌を与えることでやってみてはいかがでしょうか?ファイル1grepの検索語として使用して検索します。ファイル2

$ grep -f file1 file2 > file3

一部のプラットフォームでは、パフォーマンスの問題のためにegrepまたはggrepが必要または必要であることに注意してください。

関連情報