Borulama terimi (dosya adı değil) grep


23

Bir dosyadan belirli bir sayı içeren belirli satırları seçmek istiyorum. Aramak istediğim dosya denir 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

İlk parça, borudan önce çalışır, 8707, 8824 vs. gibi aranacak terimleri üretir. Ancak, ikinci kısım yoktur.

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

Boru tarafından üretilen terimler için hedef dosyayı aramak yerine, arama terimlerini girdi dosyası olarak kabul eder. Dolayısıyla, şöyle hata mesajları alıyorum:

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

os_clusters/piRNA_clusters.bedBoru tarafından üretilen terimleri aramak için dosyayı değiştirmek için neye ihtiyacım var ?


Yanıtlar:


35

Sanırım sen istiyorsun

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

-fsöyler grepbir dosyadan kendi arama deseni elde etmek ve -bu dosyanın (sizin durumda borunun çıkış) stdin'nin aslında olduğunu söyler.

GNU dışı grepkullanım için @ rici'nin yorumu sayesinde

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

Bahşiş için teşekkürler, ama az önce üretti:grep: -: No such file or directory
Unfun Kedisi

8
Eğer gnu grep kullanmıyorsanız, -f /dev/stdinyerine deneyin-f -
rici

OS X 10.8, Mountain Lion
Unfun Kedisi,

6
<()grep -f <(awk ...) os_clusters/piRNA_clusters.bed
Bash'in
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.