Поиск по запросу (не по имени файла) в 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
Несчастный кот

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