Convert Key: O valor emparelha vários blocos de dados em arquivos csv

2

Eu tenho vários blocos de dados de pares de chave: valor separados por delimitador "*************" em um arquivo de texto.A ajuda necessária aqui é para um script de shell para convertê-los em arquivo csv .

*************
Name : Anderson 
Age : 32 
Country : U.S
*************
Name : Pramod 
Country : U.K
*************
Country : Africa 
Sport : Football
*************

A saída deve ser o arquivo csv com o formato abaixo OutPut:

Name,Age,Country,Sport
Anderson,32,U.S.A,
Pramod,,U.K,
,,Aftica,Football

Isto é similar à conversão do rec2csv a partir de recutils GNU, mas isso eu quero que seja feito pelo Shell Scripting

    
por Rudra 03.12.2015 / 19:38

1 resposta

1

Você pode usar awk para essa conversão:

$ awk -F' : ' 'BEGIN { print "Name,Age,Country,Sport"; OFS="," }
    /^\*+$/ && NR>1 { print a["Name"], a["Age"], a["Country"], a["Sport"];
                      delete a; next}
    { a[$1]=$2} ' file.rec

Onde : é usado como separador de campos de entrada, , é definido como separador de campos de saída, a matriz associativa a é usada para armazenar temporariamente os valores, a expressão regular ^\*+$ é usada para reconhecer o registro separando linhas, um registro completo é impresso somente após a segunda linha de separação (ou seja, se o número de registros for maior que 1) e após cada registro a matriz é limpa.

As variáveis $1 e $2 referenciam a chave e o valor na entrada. A instrução next avança diretamente o processamento para a próxima linha.

As chaves não existentes na matriz associativa resultam em sequências vazias - o que corresponde à pergunta.

    
por 03.12.2015 / 20:21