Передача пошукового терміну (не ім'я файлу) до файлу 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отримати свій шаблон пошуку з файлу і -повідомляє, що цей файл насправді stdin (висновок труби у вашому випадку).

Завдяки @ RICI зауваження, невикористання GNU grepвикористання

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

Дякую за пораду, але вона щойно вийшла:grep: -: No such file or directory
Нефункціональний кіт

8
Якщо ви не використовуєте gnu grep, спробуйте -f /dev/stdinзамість-f -
rici

OS X 10.8 aka Mountain Lion
The Unfun Cat

6
Ви також можете використовувати <()синтаксис bash :grep -f <(awk ...) os_clusters/piRNA_clusters.bed
rici
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.