padrão grep que coincide exatamente com o arquivo e pesquisa apenas na primeira coluna

4

Eu tenho um bigfile assim:

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

então meu arquivo padrão é:

denovo1
denovo3
denovo22

Estou tentando usar fgrep para extrair apenas as linhas que correspondem exatamente ao padrão no meu arquivo (por isso, quero denovo1 , mas não denovo11 ). Eu tentei usar -x para a correspondência exata, mas depois recebi um arquivo vazio. Eu tentei:

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

Existe uma maneira de fazer pesquisas no grep apenas na primeira coluna?

    
por Francesca de Filippis 22.11.2014 / 13:52

2 respostas

5

Você provavelmente deseja o -w flag - de 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.

ou seja,

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

Para impor a correspondência apenas na primeira coluna, você precisaria modificar as entradas no arquivo padrão para adicionar uma âncora de linha : você também poderia usar a âncora \b word em vez de a linha de comando -w switch eg em patfile :

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

então

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

Observe que você deve descartar a opção -F se o arquivo contiver expressões regulares em vez de sequências simples e fixas.

    
por 22.11.2014 / 14:05
4

também é possível usar o awk:

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

saída:

denovo1 xxx yyyy oggugu ddddd
denovo22 hhhh yyyy kkkk iiii
    
por 22.11.2014 / 15:04