2014-11-27 2 views
0

약 5000 패턴 (줄 간격)의 .txt 파일을 사용하여 18000 줄의 다른 파일을 통해 일치하는 항목을 검색하려고합니다. 지금까지 나는 인터넷에서 찾을 수있는 grep과 awk의 모든 형태를 시도해 왔지만 여전히 작동하지 않습니다. 그래서 나는 완전히 엉망이되었습니다.UNIX에서 파일의 패턴을 사용하여 줄을 찾는 방법

다음은 각 파일의 일부 텍스트입니다.

Pattern.txt

rs2622590 
rs925489 
rs2798334 
rs6801957 
rs6801957 
rs13137008 
rs3807989 
rs10850409 
rs2798269 
rs549182 

에는 여분의 공백 또는 아무것도 없습니다.

File.txt를

snpid hg18chr bp a1 a2 zscore pval CEUmaf 
rs3131972  1  742584 A  G  0.289 0.7726 . 
rs3131969  1  744045 A  G  0.393 0.6946 . 
rs3131967  1  744197 T  C  0.443 0.658 . 
rs1048488  1  750775 T  C  -0.289 0.7726 . 
rs12562034  1  758311 A  G  -1.552 0.1207 0.09167 
rs4040617  1  769185 A  G  -0.414 0.6786 0.875 
rs4970383  1  828418 A  C  0.214 0.8303 . 
rs4475691  1  836671 T  C  -0.604 0.5461 . 
rs1806509  1  843817 A  C  -0.262 0.7933 . 

File.txt를가 의대 디렉토리에서 직접 다운로드했다.

저는 UNIX에 대해 매우 익숙해서 도움이 될 것입니다.

미안 편집 : 귀하가 추천하는 모든 것을 분명히 시도했으며 결과가 비어 있습니다. 구문 파일이나 텍스트 파일에 누락 된 부분이 있습니까?

P.P.S 개별 greps 작업을 수행하는 것과 일치하는 항목이 있음을 알고 있습니다. 나는이 질문을 unix.stackexchange로 옮길 것이다. 답변 해 주셔서 감사합니다. 나는 그들을 모두 시험해 보겠습니다.

문제 해결 : 나는 분명히 도스 객차를 사용하고있었습니다. 나는 전에 이것에 대해 몰랐다. Patterns.txt File.txt를,

DOS2UNIX *

AWK '페이지에서 $ (1) NR == FNR {다음 페이지 [$ 0]}'이 문제가 발생하는 미래의 사용자의 경우 여기 근무 솔루션입니다 >

+1

Google의 "grep patterns from file"에는 많은 답변이 있습니다. 하지만 분명히 "모든 형태의 grep"에는'grep -f'가 포함되어 있지 않습니다. http://unix.stackexchange.com/questions/83260/reading-grep-patterns-from-a-file – John3136

+0

unix.stackexchange에 더 적합합니다. .com – John3136

+1

패턴 파일에 DOS 캐리지 리턴이 포함되어 있고 대상 파일이 적어도 같은 위치에 있으면 분명히 일치하지 않습니다. 답이'dos2unix' 인 곳에서 수 백 (또는 수천 가지)의 질문을 검색하십시오. [bash tag wiki] (http://stackoverflow.com/tags/bash/info)도 토론이 있습니다. – tripleee

답변

0

는 나도 몰라 원하는 것을 당신에게 말해주십시오.원하는 것이지만 원하는 출력을 생성하지 못하는 경우 파일 중 하나 또는 둘 모두에 Windows에서 생성되는 제어 문자가 포함되어 있으므로 dos2unix 또는 유사 문자를 먼저 실행하십시오.

+1

감사합니다. 에드, 완벽하게 작동했습니다. 모든 단일 파일에서 dos2unix를 실행하고 awks 코드를 실행했습니다. 모든 경기를 치뤘으며 지금은 다른 파일로 파이핑 중입니다. dos2unix * awk 'NR == FNR {p [$ 0]; 다음}'Patterns.txt File.txt | Output.txt –

3

OUTPUT.TXT 현재 grep -Fw를 사용할 수 있습니다

grep -Fw -f Pattern.txt File.txt 
사용

옵션은 다음과 같습니다

  • -F - 고정 문자열 검색으로 입력을 밟아 비 정규식
  • -w - 전체 단어 만
  • -f file을 일치 - 파일의 각 라인을 읽을 수있는 파일
+0

괜찮습니다. File.txt의 각 행에서 첫 번째 필드와 일치하는 것으로 보이는 부분이 있으면 일치 할 것이므로 일치하지 않을 가능성이 있습니다. –

+0

동의합니다. OP가 명확히하기 위해 OP를 기다리고 있었지만 첫 번째 필드 만 일치시키기 위해 awk 라이너 하나를 사용했습니다. – anubhava

-1

사용 쉘 스크립트에서 패턴을 읽기 패턴을 포함하고 fgrep하면됩니다. 그것은 당신이 무엇을하지 않으면

awk 'NR==FNR{p[$0];next} $1 in p' Patterns.txt File.txt 

: 그것은 당신이 원하는 무엇이나하지, 그러나 이것은 그의 첫 번째 필드 Patterns.txt에서 문자열을 동일 File.txt를에서 모든 라인을 인쇄 할 경우

#!/bin/bash 

FILENAME=$1 

awk '{kount++;print $0}' $FILENAME | fgrep -f - PATTERNFILE.txt 
+0

awk 스크립트가'cat $ FILENAME'이하지 않을 것이라고 생각하는 것은 무엇입니까? 파이프의 포인트는 무엇입니까? –

관련 문제