grep 패턴은 파일과 정확히 일치하고 첫 번째 열에서만 검색합니다.

grep 패턴은 파일과 정확히 일치하고 첫 번째 열에서만 검색합니다.

다음과 같은 큰 파일이 있습니다.

denovo1 xxx yyyy oggugu ddddd
denovo11 ggg hhhh bbbb gggg
denovo22 hhhh yyyy kkkk iiii
denovo2 yyyyy rrrr fffff jjjj
denovo33 hhh yyy eeeee fffff

그러면 내 스키마 파일은 다음과 같습니다.

denovo1
denovo3
denovo22

내 파일의 패턴과 정확히 일치하는 행만 추출하기 위해 사용하려고 합니다 fgrep(그래서 원 denovo1하지만 그렇지 않습니다 denovo11). 정확한 일치를 사용해 보았지만 -x빈 파일이 생겼습니다. 나는 시도했다:

fgrep -x --file="pattern" bigfile.txt > clusters.blast.uniq

첫 번째 열에서만 grep 검색을 수행하는 방법이 있습니까?

답변1

플래그를 원할 수도 있습니다 -w.man grep

   -w, --word-regexp
          Select  only  those  lines  containing  matches  that form whole
          words.  The test is that the matching substring must  either  be
          at  the  beginning  of  the  line,  or  preceded  by  a non-word
          constituent character.  Similarly, it must be either at the  end
          of  the  line  or  followed by a non-word constituent character.
          Word-constituent  characters  are  letters,  digits,   and   the
          underscore.

grep -wFf patfile file
denovo1 xxx yyyy oggugu ddddd
denovo22 hhhh yyyy kkkk iiii

첫 번째 열에서만 일치를 강제하려면 추가할 패턴 파일의 항목을 수정해야 합니다.라인 앵커\b: 명령줄 스위치 대신 앵커라는 단어를 사용할 수도 있습니다 . -w예를 들면 다음과 같습니다.patfile

^denovo1\b
^denovo3\b
^denovo22\b

그 다음에

grep -f patfile file
denovo1 xxx yyyy oggugu ddddd
denovo22 hhhh yyyy kkkk iiii

-F파일에 단순 고정 문자열이 아닌 정규식이 포함된 경우 이 스위치를 제거해야 합니다.

답변2

awk를 사용할 수도 있습니다.

awk 'NR==FNR{a[$0]=$0}NR>FNR{if($1==a[$1])print $0}' pattern_file big_file

산출:

denovo1 xxx yyyy oggugu ddddd
denovo22 hhhh yyyy kkkk iiii

관련 정보