Extração rápida de pares de valores-chave na linha de comando do Linux

1

Eu tenho um arquivo de texto grande (dezenas de GBs) com dados em key=value;foo=bar;baz=quo format.

O número e a ordem das chaves podem mudar de linha para linha.

Eu preciso processar este arquivo e extrair valores para a chave foo , da linha de comando do Linux (estou usando o bash como um shell).

Qual é a maneira mais eficiente de fazer isso sem instalar grandes dependências ou escrever código?

    
por Alexander Gladysh 02.04.2014 / 14:01

3 respostas

1

sed -n -e 's/^foo=\([^;][^;]*\).*//p'  -e 's/.*;foo=\([^;][^;]*\).*//p' yourGBfile

-n opção, não imprima todas as linhas

-e 'script'

O primeiro script ee corresponde se uma linha começa com foo= e o segundo e-script corresponde a foo= após um ponto e vírgula.

[^;] significa que não corresponde a nenhum ponto-e-vírgula e [^;][^;]* significa pelo menos um ponto-e-vírgula (não encontrará valores vazios!), o que efetivamente extrai seu valor entre o igual e o ponto e vírgula.

Os parênteses incluem uma string posicional que é referenciada com .

    
por 02.04.2014 / 15:00
1

Isso é um monte de dados, então qualquer solução de linha de comando será lenta.

grep -oP '(?<=\bfoo=)[^;]+' file
    
por 02.04.2014 / 15:02
0

Você também pode tentar uma solução perl, que pode ser mais rápida: perl -nle 'print "$1" if /foo=(.*);/' filename.txt

    
por 02.04.2014 / 15:06