correspondência exata de string para várias strings com grep

0

Estou procurando correspondências exatas de string para várias strings usando grep.

Digamos que eu queira encontrar as seguintes três cadeias de caracteres em um arquivo de dados grande que tenha cerca de 10 milhões de linhas e 10 colunas. Eu quero consultar o arquivo, então eu acho todas as linhas que têm as seguintes seqüências exatas nelas. Felizmente, apenas 1 coluna tem 'rs numbers', então não preciso especificar a coluna: rs123 rs246 rs689653

Eu tentei a seguinte expressão e retornei todas as opções que contêm essas sequências. Em alguns casos, vejo linhas com algo como "rs123456", em que quero apenas linhas com as correspondências exatas:

grep -E 'rs123|rs246|rs689653' queriedfile.txt

Então tentei a seguinte expressão com ^ e $ , mas recebi de volta NO matches para minha consulta (e sei que há alguns).

grep -E '^rs123$|^rs246$|^rs689653$' queriedfile.txt
    
por Sheila 01.11.2018 / 01:40

2 respostas

1

Você pode adicionar a opção de linha de comando -w para restringir a correspondência a palavras inteiras

$ printf 'rs123456\nrs246\n' | grep -wE 'rs123|rs246|rs689653'
rs246

ou adicione âncoras de palavras explicitamente

$ printf 'rs123456\nrs246\n' | grep -E '\b(rs123|rs246|rs689653)\b'
rs246

(você estava perto de ^ e $ - mas esses são line -anchors).

    
por 01.11.2018 / 01:52
0

Se você quiser que a correspondência exata corresponda:

grep -Fwf <(printf "%s\n" rs123 rs246 rs689653) file

Em que -F fornece correspondência de cadeia exata (sem regex), -w é palavra inteira e -f lê os "padrões" do arquivo fornecido pela substituição do processo.

Se você tiver mais palavras para combinar para que a parte do printf fique bastante longa, você pode usar um array de shell para armazená-las:

words=( rs123 rs246 rs689653 )
grep -Fwf <(printf "%s\n" "${words[@]}") file

Alternativamente, o awk pode funcionar para as suas necessidades:

awk -F '\t' '
    $6 == "rs123"
    $6 == "rs246"
    $6 == "rs689653"
' file

Substitua o separador de campo atual e o número do campo conforme apropriado.

    
por 01.11.2018 / 01:57

Tags