Quero escolher certas linhas que contêm um determinado número de um arquivo. O arquivo que eu quero pesquisar é chamado 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
A primeira parte, antes do tubo, funciona - produz os termos a serem pesquisados, como 8707, 8824 etc. No entanto, a segunda parte não.
awk '' ... | xargs grep {} os_clusters/piRNA_clusters.bed
Em vez de procurar no arquivo de destino os termos produzidos pelo canal, ele considera os termos de pesquisa como o arquivo de entrada. Portanto, recebo mensagens de erro como:
grep: 8707: No such file or directory
grep: 8824: No such file or directory
O que preciso alterar para pesquisar no arquivo os_clusters/piRNA_clusters.bed
os termos produzidos pelo canal?
Respostas:
Eu acho que você quer
-f
instruigrep
para obter seu padrão de pesquisa de um arquivo e-
informa que esse arquivo é realmente stdin (a saída do canal no seu caso).Graças ao comentário de @ rici, pelo
grep
uso não-GNUfonte
grep: -: No such file or directory
-f /dev/stdin
em vez de-f -
<()
sintaxe do bash :grep -f <(awk ...) os_clusters/piRNA_clusters.bed