最初のファイルの末尾に空白行がある場合、あるテキストファイルから別のテキストファイルへのgrep行は失敗します。

最初のファイルの末尾に空白行がある場合、あるテキストファイルから別のテキストファイルへのgrep行は失敗します。

タブで区切られた2つの列を含むテキストファイルがあります。他のファイルのすべての行(たとえば、2つのタブで区切られた値を含む文字列)をgrepしたいと思います。最初のファイルの末尾に空白行があります。空行を削除すると、以下のコマンドが正しく機能します。しかし、私がそうしないと、そうではありません。

その行を削除できますが、なぜ失敗するのか知りたいです。また、その行を削除せずに問題を解決しようとする試みも失敗しました。助けてください?ありがとうございます。

空行を削除すると、このコマンドは正常に機能します。

grep -wF -f file1 file2 > file3

次のことを試して、行を削除せずに問題を解決しようとしました。

grep '.' file1 | grep -wF - file2 > file3

しかし、正しく動作しませんでした。

ベストアンサー1

空のパターンマッチングどの行を入力します。したがって、パターンリストにfile11つが含まれている場合、すべての行がfile2一致します。あなたは言わなかったが、それがあなたが経験している問題であることを願っています。少なくとも空行が発生する他の問題は考えられません。

-fgrepパイプラインは問題ないようですが、後者のgrepオプションが必要である点だけが異なります。

grep '.' file1 | grep -wF -f - file2 > file3
                          ^^

あるいは、プロセス置換を使用することもできます。

grep -wF -f <(grep '.' file1) file2 > file3

<( cmd )Ksh/Bash/Zsh が実行する作業は次のとおりです。読み込み時に出力を生成するファイル名に置き換えられます。cmd

おすすめ記事