다음과 같은 큰 파일이 있습니다.
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