awkコマンドの結果をパラメータとして渡します。

awkコマンドの結果をパラメータとして渡します。

awk2つの異なる列の値を取得したことがあるとします。

出力は次のように仮定します。

アルファベット

定義

今、私は前のコマンドでパイプを使用するためのパターンとしてとをabc使用したいと思います。これを行う方法はありますか?defgrep

詳細な手順については、次を参照してください。

PDFファイルがあり、以下を使用してファイル内のキーワードを検索しています。

pdftotext 'filename.pdf' - | grep 'pattern'

一致するものが見つかったら、結果の最初の列と2番目の列を前のコマンドを含むパイプラインでgrepの引数として使用しようとします。最初の2列を使用できます

pdftotext 'filename.pdf' - | grep 'pattern' | awk '{ print $1, "\t"$2 }'

さて、パイプラインでgrepコマンドの後にこれらの2つの値を上記の値に戻す(2番目の)パターンとして渡すにはどうすればよいですか?

ベストアンサー1

次のようにプロセス置換を使用してこれを実行できます。

grep -f <(awk '{print $1 "\n" $3}' filename) otherfile

これはgrepファイル(フラグ)からパターンを読み取ります。この場合、実際には-f1行に1つのパターンを印刷するプロセスの出力です。awk...filenameそれからこれらのパターンを見つけてください。otherfile

grepそれほど効率的ではありませんが、実際にパイプでこれを行うには、標準入力から対応するパターンを読み取ることができます。

awk '{print $1 "\n" $3}' filename | grep -f - otherfile

編集:grepとawkの使用に関する質問編集内容を見ると、次のようにしてawkにパターンマッチングを実行させることができます。

grep -Ff <(awk '/pattern/ {print $1 "\n" $3}' <(pdftotext 'filename.pdf' -)) otherfile

またはパイプで:

pdftotext 'filename.pdf' - | awk '/pattern/ {print $1 "\n" $3}' | grep -Ff - otherfile

おすすめ記事