awk
2つの異なる列の値を取得したことがあるとします。
出力は次のように仮定します。
アルファベット
定義
今、私は前のコマンドでパイプを使用するためのパターンとしてとをabc
使用したいと思います。これを行う方法はありますか?def
grep
詳細な手順については、次を参照してください。
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
ファイル(フラグ)からパターンを読み取ります。この場合、実際には-f
1行に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