タブで区切られた2つの列を含むテキストファイルがあります。他のファイルのすべての行(たとえば、2つのタブで区切られた値を含む文字列)をgrepしたいと思います。最初のファイルの末尾に空白行があります。空行を削除すると、以下のコマンドが正しく機能します。しかし、私がそうしないと、そうではありません。
その行を削除できますが、なぜ失敗するのか知りたいです。また、その行を削除せずに問題を解決しようとする試みも失敗しました。助けてください?ありがとうございます。
空行を削除すると、このコマンドは正常に機能します。
grep -wF -f file1 file2 > file3
次のことを試して、行を削除せずに問題を解決しようとしました。
grep '.' file1 | grep -wF - file2 > file3
しかし、正しく動作しませんでした。
ベストアンサー1
空のパターンマッチングどの行を入力します。したがって、パターンリストにfile1
1つが含まれている場合、すべての行がfile2
一致します。あなたは言わなかったが、それがあなたが経験している問題であることを願っています。少なくとも空行が発生する他の問題は考えられません。
-f
grepパイプラインは問題ないようですが、後者のgrepオプションが必要である点だけが異なります。
grep '.' file1 | grep -wF -f - file2 > file3
^^
あるいは、プロセス置換を使用することもできます。
grep -wF -f <(grep '.' file1) file2 > file3
<( cmd )
Ksh/Bash/Zsh が実行する作業は次のとおりです。読み込み時に出力を生成するファイル名に置き換えられます。cmd