#!/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
ために使用されます。行が一致する場合は、その行が再度出力され、ファイルにリダイレクト(追加)されます。grep
file2.txt
grep
file2.txt
matches.txt
スクリプトが停止した理由は、2番目のループが入力を待っているためです。最初のループで行ったように、ファイル記述子にコピーするのstdin
を忘れました。いずれにせよ、追加のファイル記述子を作成する必要はありません。ループが端末の代わりにファイルから読み取られるようにリダイレクトするだけです。stdin
3
stdin
while
答え2
使用comm
交差点を探す:
comm -12 <(sort file1.txt) <(sort file2.txt) > newlist.txt
commでは、入力ファイルをソートする必要があります。
答え3
もっと簡単に餌を与えることでやってみてはいかがでしょうか?ファイル1grepの検索語として使用して検索します。ファイル2?
$ grep -f file1 file2 > file3
一部のプラットフォームでは、パフォーマンスの問題のためにegrepまたはggrepが必要または必要であることに注意してください。