Como eu extraio linhas começando com 'Subject:' de um grande número de arquivos?

1

Eu preciso extrair um início de linha única com Subject: . Mas o problema é que eu tenho mais de 1500 arquivos .txt em uma pasta. Eu uso este script python:

from glob import glob
import fileinput
import os

with open('output.txt', 'w') as out:
    files = (os.path.join(p, f) for p, ds, fs in os.walk(os.curdir) for f in fs)
    for line in fileinput.input(files):
        if 'Subject:' in line:
            out.write(line)

na verdade, funciona bem. Mas foi preciso muito poder e tempo de processamento. Eu estou procurando um comando de terminal de substituição para este script.

    
por Miller 27.11.2015 / 16:23

3 respostas

3

O que há de errado com:

find ./ -type f -exec grep "Subject:" {} \; >/tmp/output.txt
    
por roadmr 27.11.2015 / 16:32
3

Usando grep com -r para uma pesquisa recursiva e -m1 para parar de ler o arquivo depois da primeira partida.

grep -rh -m1 '^Subject:' /path/to/your/folder/ > out

Todas as linhas correspondentes estão em out .

    
por A.B. 27.11.2015 / 16:38
1

Usando sed em qualquer lugar:

sed -n '/^Subject:/p' /path/to/dir/*.txt

Do diretório que contém arquivos:

sed -n '/^Subject:/p' *.txt

/^Subject:/ corresponderá apenas às linhas que começam com Subject: .

Para salvar a saída em um arquivo:

sed -n '/^Subject:/p' *.txt >output.file
    
por heemayl 27.11.2015 / 17:14