web-dev-qa-db-ja.com

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パイプによって生成された用語については?

24
The Unfun Cat

あなたが欲しいと思う

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

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

@riciのコメントのおかげで、GNU以外のgrepを使用

... | grep -f /dev/stdin os_clusters/piRNA_clusters.bed
36
Joseph R.