Extrai valores do par de valores-chave e valores de saída separados por vírgula

1

Dados do arquivo de entrada

Name: aa
Age: 20
Address: zzzz

Name: bb
Age: 17
Address: cccc

Eu quero produzir como este

aa,20,zzzz
bb,17,cccc
    
por Yumiko 08.11.2016 / 15:33

3 respostas

2

$ cat ip.txt 
Name: aa
Age: 20
Address: zzzz

Name: bb
Age: 17
Address: cccc

$ awk 'NF{print $2}' ip.txt | pr -3ats,
aa,20,zzzz
bb,17,cccc
  • Usando awk para imprimir apenas os valores da segunda coluna e pular linhas vazias, verificando NF
  • Em seguida, use pr para imprimir em 3 colunas com , como separador
por 08.11.2016 / 15:52
2
perl -00nE 'say join(",", /:\s*(.*)/g)' ip.txt

onde:

  • perl -00nE EXP - significa: para cada parágrafo do {EXP}
  • /:(.*)/g - retorna a lista dos grupos correspondentes
  • join(",", list) - separe os elementos por ,

\ thanks {Sundeep}

    
por 08.11.2016 / 16:34
1

Um exemplo usando o Perl. Faça a iteração de cada linha do arquivo e capture apenas os dados que desejamos em uma matriz, junte os elementos da matriz com uma vírgula e imprima-os.

use warnings;
use strict;

my $file = 'file.txt';

open my $fh, '<', $file or die $!;

while (my $line = <$fh>){
    my @sections = $line =~ /:\s(.*?)\s/g;
    print join ',', @sections;
    print "\n";
}

Saída:

aa,20,zzzz
bb,17,cccc
    
por 08.11.2016 / 15:52