Como extrair texto de um arquivo grande, iniciando na primeira ocorrência de uma string?


7

Eu tenho um arquivo de log grande que desejo revisar. Todas as coisas ruins começam com a ocorrência certa de uma sequência de erros. Quero então examinar as últimas linhas X a partir desse ponto e ver o que pode ter causado esse erro. Não consigo abrir o arquivo com o meu editor de texto favorito porque ele esgota toda a memória RAM da máquina.

Eu pensei que talvez eu poderia ser capaz de encontrar a linha que ocorre em e depois usar outro utilitário para obter dados de linha  X para a linha  Y . Isso é possível?

Respostas:


12

Você pode simplesmente usar "grep" com as opções -Ae / ou -B. O -Acomutador lerá o número X de linhas após o erro, então provavelmente é o que você deseja, e o -Bcomutador lerá o número X de linhas antes do erro, para que você faça algo assim:

grep -A10 -B2 "sequência de caracteres para localizar" /path/and/file.tofind

para encontrar as 10 linhas que ocorrem após "string to find", bem como as 2 linhas antes dela.

Como alternativa - e provavelmente é uma solução muito pior, você pode simplesmente usar "head" e "tail" para encontrar a primeira e a última parte do arquivo que deseja; mas isso pressupõe que você saiba os números das linhas. Ou seja, se você possui um arquivo de linha longa e deseja ler as linhas 500-510, tente o seguinte:

cabeça -510 / etc / file / to / search | cauda -10

O que extrairia primeiro as primeiras 510 linhas do arquivo e depois leria as últimas 10 dessas linhas.


2
se não estiver usando um padrão regexp, o grep -F fornecerá o melhor desempenho.
suspectus

Isso é legal, eu não sabia sobre essas opções. Quando você respondeu, eu tinha conseguido isso usando grep -npara obter o número da linha e sed '#,#p'obter um intervalo de linhas. Se a sequência de erros ocorrer com freqüência, essas opções retornam apenas linhas para a primeira ocorrência? Posso usar m 1para conseguir isso, se não?
deed02392

0

Obtenha um novo "editor favorito".  vinão lê arquivos na RAM na sua totalidade.

Em vique você pode procurar por uma seqüência de digitação /, a string de pesquisa para, e Enter. A linha correspondente será posicionada no meio da tela (janela), para que você possa ver aproximadamente 12 linhas antes e 12 linhas depois (se sua janela tiver 24 linhas de altura). Obviamente, você pode rolar para frente ou para trás para ver mais. Imprensa npara encontrar o  n ocorrência ext da cadeia.


-1

O script a seguir fornecerá as primeiras 10 linhas e 10 colunas de um corte de arquivo grande -f1-10 -d '' your_big_file | cabeça -n10


11
cut -f1-10 -d '' seu_bigo_de_arquivo | cabeça -n10
user3376600

(1) E se ERROR: The foo failed to barocorrer na linha 4283 do arquivo? Como o usuário vê as linhas 4281-4293? (2) Por que você está falando de colunas? A pergunta não diz nada sobre colunas.
Scott
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.