2017-03-24 18 views
0

すべて私はあるファイル( 'file1.txt')にあるテキストを別のファイル( 'file2.txt ')grepオプション-fを使用して、ファイルから検索される式を読み取るよう指示します。'grep -f'オプションですべての一致を取得

'FILE1.TXT'

'FILE2.TXT'

私はコマンドを実行すると:

はgrep -f file1.txt file2.txt -w

「a」の出力が1回だけ得られます。代わりに私は 'file1.txt'ファイルで2回発生するので、2回取得したいと考えています。 grep(または他のunix/linux)ツールが読み込んだ行ごとに一致するようにする方法はありますか? ありがとうございます。 アルトゥーロ

+0

*テキストの一致* - いくつかの正確なテキスト?それはラインとラインを比較するべきですか? – RomanPerekhrest

+0

はい、完全一致です。あなたの入力に続いて、-wオプションを追加しました。はい、それは行ごとの比較です。 – Arturo

答えて

0

Grepは設計どおりに動作し、出力回線は1つだけです。 あなたは別のアプローチを使用することができます。

while IFS= read -r pattern; do 
    grep -e $pattern file2.txt 
done < file1.txt 

これにより、あなたが探しているの出力が得られ、grepのためのパターンとしてFILE1.TXT内のすべての行を使用します。

+0

それはトリックをやった!ありがとうございました。そしてそれは私の以前のgrepコマンドよりもはるかに高速です。 – Arturo

0

あなたは

grep -f pattern.txt file.txt 

を使用する場合それはファイルfile.txtpattern.txtで見つかったパターンと一致することを意味します。

2つ目のファイルにすべてがあるため、1つの出力しか得られません。

ファイルを交換してみ

grep -f file2.txt file1.txt -w 

これは、あなたの質問にお答えしていますか?

+0

私はそれを理解していますが、まだ 'pattern.txt'のパターン(繰り返したものも)が 'file.txt'にあるたびに一致するものを印刷する方法を見つけたいと思います。 「grep -f」ではなく、ツールやスクリプトでも十分です。 – Arturo

関連する問題