Tenho dificuldades com o regex para extrair certas informações de um arquivo de dados

1

Os dados que estou trabalhando com dados que possuem este formato:

1880    20  David   7570    Mabel   13096

Eu preciso puxar o ano (1880), o posto (20) e o nome apenas (David ou Mabel). O resultado final é:

1880        20      David

ou

1880        20      Mabel

Tenho sido bem-sucedido em apenas separar o ano, a classificação e o nome, mas tenho problemas para reunir uma expressão regular. Eu sei o básico da regex, mas atualmente não consigo acessar minhas anotações.

Estou tentando usar o egrep.

    
por gbrooks 12.02.2014 / 11:22

3 respostas

2

Eu recomendaria uma solução Python (não sei o que você está usando atualmente):

import re

re_find_data = re.compile(r'^(\d+)\s+(\d+)\s+(\S+)\s+(\d+)\s+(\S+)\s+(\d+)$')

for line in open(r'/path/to/file'):
    for match in re_find_date.findall(line):
        print(match)
        # Do something with 'match'

        # You can index the 'match' tuple like so:
        print(match[2])
        # Print 3rd part (name)

Em relação a grep

Não tenho certeza se grep pode ser usado neste caso. Não tem a capacidade de imprimir grupos numerados específicos, que é o que você precisa (eu acredito). Eu estaria interessado em saber se o seu professor (ou qualquer outra pessoa) tem uma solução com grep puro.

Este Regex deve funcionar, mas você precisa extrair os campos que deseja dos grupos numerados (demonstrado no exemplo do Python):

(\d+)\s+(\d+)\s+(\S+)\s+(\d+)\s+(\S+)\s+(\d+)

grep não é a ferramenta certa. Um Regex é, mas sob uma implementação diferente (olá, Python!).

    
por kiri 12.02.2014 / 11:31
3
grep -Po '\d+\s+\d+\s+\w+' file.txt
    
por TiGR 12.02.2014 / 11:28
0

Isso era impossível (pelo menos do meu escopo da classe) apenas usando o grep. Fui informado alguns dias depois pelo meu professor que ele queria que usássemos uma combinação de comandos para alcançar o resultado desejado. No entanto, todas as respostas foram válidas e funcionaram quando eu tentei. Isto serve apenas como uma resposta direta a esta questão baseada em conhecimento muito inicial (alguém da minha experiência atual no Ubuntu).

    
por gbrooks 19.02.2014 / 18:06