A maneira mais fácil de remover linhas indesejadas de um arquivo de texto enorme

2

Eu tenho um arquivo de texto grande com um tamanho de mais de 30 megabytes. Quero remover todas as linhas que não correspondem a alguns critérios específicos, por ex. linhas que não têm a string 'START'.

Qual é a maneira mais fácil de fazer isso?

    
por Shawn 03.06.2010 / 03:45

5 respostas

3

Se o padrão for realmente simples, grep -v funcionará:

grep -v START bigfile.txt > newfile.txt

newfile.txt terá tudo de bigfile.txt, exceto linhas com "START".

(Caso não seja óbvio, isso é algo que você fará no Terminal ou em outra ferramenta de linha de comando)

    
por 03.06.2010 / 04:02
2

A pergunta original perguntava como remover as linhas que não correspondiam a um padrão. Em outras palavras, como manter as linhas que correspondem ao padrão. Assim, não há necessidade de -v .

grep START infile.txt > outfile.txt

Note que o grep pode usar expressões regulares para fazer uma correspondência de padrões muito mais poderosa. A sintaxe é um pouco obtuso embora.

    
por 03.06.2010 / 04:49
1

Use o GNU sed com o argumento -i .

    
por 03.06.2010 / 03:51
1
grep -v START inputfile

deve funcionar. grep é padrão no MacOS e no Linux / Unix, pode ser instalado no MS Windows.

A opção -v é para em v , inserindo as linhas de saída que não correspondem ao padrão (o inverso do comportamento normal do grep).

    
por 03.06.2010 / 04:02
1

Para o prompt de comando do Windows ( help find para opções):

find /v "START" original_file.txt > new_file.txt

Para Linux, OS X, etc. ( man grep para opções):

grep -v "START" original_file.txt > new_file.txt

Para uma correspondência de texto mais complicada, grep oferece muito mais funcionalidade do que find . Se você estiver no Windows, poderá encontrar facilmente uma porta de grep ou usar o Windows ' findstr em vez de find .

    
por 03.06.2010 / 04:03