検索語(ファイル名ではない)をgrepにパイプ

検索語(ファイル名ではない)をgrepにパイプ

特定の数字を含むファイルから特定の行を選択したいと思います。検索したいファイル名はです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パイプラインで生成された用語のファイルを検索するには、何を変更する必要がありますか?

答え1

私の考えでは、あなたが欲しいと思います。

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

-fgrepファイルから検索パターンをインポートするように指示し、-ファイルが実際に標準入力(あなたの場合はパイプ出力)であることを伝えます。

非GNUのgrep使用についてコメントしてくれた@riciに感謝します。

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

関連情報