grepへの検索用語(ファイル名ではない)のパイピング


23

ファイルから特定の番号を含む特定の行を取り出したい。検索したいファイルはと呼ばれos_clusters/piRNA_clusters.bedます。

awk '{if (a[$0]++ == 0) {split($0,b,"."); ;split(b[1],c,"r"); print c[3]}};' test_non_enriched | xargs grep {} os_clusters/piRNA_clusters.bed

パイプの前の最初の部分は機能します。8707、8824など、検索する用語を生成します。ただし、後者は機能しません。

awk '' ... | xargs grep {} os_clusters/piRNA_clusters.bed

パイプによって生成された用語をターゲットファイルで検索する代わりに、検索用語を入力ファイルと見なします。したがって、次のようなエラーメッセージが表示されます。

grep: 8707: No such file or directory
grep: 8824: No such file or directory

os_clusters/piRNA_clusters.bedパイプによって生成された用語をファイルで検索するには、何を変更する必要がありますか?


回答:


35

欲しいと思う

... | grep -f - os_clusters/piRNA_clusters.bed

-f伝えgrepファイルから検索パターンを取得し、-このファイルが実際に(あなたのケースでは、パイプの出力)を標準入力されていることを伝えます。

@riciのコメントのおかげで、GNU以外でのgrep使用について

... | grep -f /dev/stdin os_clusters/piRNA_clusters.bed

先端をありがとう、それだけで生産さ:grep: -: No such file or directory
Unfun猫

8
gnu grepを使用していない場合は、-f /dev/stdin代わりに試してください-f -
リチ

OS X 10.8別名マウンテンライオン
不愉快な猫

6
bashの<()構文も使用できますgrep -f <(awk ...) os_clusters/piRNA_clusters.bed
。– rici
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.