grep pattern exacly matching from file and search only in first column
You probably want the -w
flag - from 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.
i.e.
grep -wFf patfile file
denovo1 xxx yyyy oggugu ddddd
denovo22 hhhh yyyy kkkk iiii
To enforce matching only in the first column, you would need to modify the entries in the pattern file to add a line anchor: you could also make use of the \b
word anchor instead of the command-line -w
switch e.g. in patfile
:
^denovo1\b
^denovo3\b
^denovo22\b
then
grep -f patfile file
denovo1 xxx yyyy oggugu ddddd
denovo22 hhhh yyyy kkkk iiii
Note that you must drop the -F
switch if the file contains regular expressions instead of simple fixed strings.
one can use awk too:
awk 'NR==FNR{a[$0]=$0}NR>FNR{if($1==a[$1])print $0}' pattern_file big_file
output:
denovo1 xxx yyyy oggugu ddddd
denovo22 hhhh yyyy kkkk iiii