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파일에서의 검색 패턴을 얻고 -이 파일이 (귀하의 경우 파이프의 출력) 표준 입력 실제로임을를 알려줍니다.

비 GNU grep사용을 위한 @rici의 의견 덕분에

... | 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 일명 마운틴 라이온
불행한 고양이

6
bash의 <()문법을 사용할 수도 있습니다 :grep -f <(awk ...) os_clusters/piRNA_clusters.bed
rici
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.