Como fazer uma pesquisa posicional em um arquivo e encontrar escreva as linhas contendo o padrão correspondente em outro arquivo [closed]

0

O tamanho do arquivo é enorme e eu tenho que extrair apenas as linhas que correspondem a um determinado código de localização que é de comprimento variável (variando de 2 bytes a 8 bytes).

Eu não posso usar o grep normal, pois isso pode dar resultados indesejáveis. Quando eu procuro por loc cd mas, se eu der grep mas , ele combina com o nome thomas ...

Como esse é um arquivo de tamanho fixo, eu sei a posição em que pesquisar. Existe algum comando para procurar em determinada posição (de 620-628 no meu caso) e extrair as linhas correspondentes?

    
por Sanjana 06.09.2016 / 15:24

3 respostas

1

sed é uma boa opção para isso

sed -n '620,628 { /mas/p }'

Agora também é possível ter sed terminate (então corra mais rápido) depois de ler até a última linha de seu interesse; eg

sed -n -e '620,628 { /mas/p }' -e '629q'

Para correspondências completas de palavras, você pode alterar a expressão cercando-a com \b

por exemplo

sed -n -e '620,628 { /\bmas\b/p }' -e '629q'

Agora, isso corresponderá a this contains mas and stuff , mas não corresponderá a this is a masterful piece of work .

    
por 06.09.2016 / 15:47
0

Eu tentaria

awk '/mas/ && NR >= 620 && NR <= 628' file

onde

  • NR (número de registros) é o número da linha
  • /mas/ é o padrão pesquisado
  • a ação padrão é imprimir a linha
por 06.09.2016 / 15:39
0

Eu tentaria

grep -P '^.{620}mas' file

Se o seu padrão está mudando, você pode usar variáveis

PAT='mas\b'
grep  -nP "^.{620}$PAT" file
    
por 06.09.2016 / 18:18

Tags