como converter vários txt para CSV com dados de campo separados por linhas em branco [fechado]

2

Eu tenho alguns dados em vários arquivos de texto, onde os campos são separados por linhas em branco. Existem apenas 4 campos, mas no segundo campo existem mais subcampos, podem ser três ou mais. O primeiro campo é sempre um número, 0 ou 1.

0
name_surname
1 yellow 1 brown 2 green
 short description

todos os arquivos são criados da mesma maneira. O problema é que eu poderia ter mais ou menos cores no terceiro campo.

Todo texto deve se tornar uma linha em um arquivo csv

0 [tab] name_surname [tab] 1 yellow ; 1 brown; 2 green [tab] "description"
1 [tab] name2_surname [tab] 1 brown; 1 blue [tab] "description"

Depois de algumas leituras, descobri que deveria usar o awk de alguma forma, mas isso está além do que posso fazer.

    
por saiko 25.07.2013 / 11:48

2 respostas

0

Eu sei como fazer isso usando sed :

#!/bin/sed -nf
# Read second line & save first two lines to hold
N; h
# Read third line and perform transform
n; s/\([0-9]\+ [a-zA-Z]\+\) /; /g
# Append it to hold
H
# Give hold back
g
# Read fourth line
N
# Transform newlines
s/\n/\t/g
# Print result
p

Ou em uma linha:

sed -n 'N;h;n;s/\([0-9]\+ [a-zA-Z]\+\) /; /g;H;g;N;s/\n/\t/g;p' data.txt
    
por 25.07.2013 / 12:18
0

Aqui está outra solução sed :

sed '/./!d;/[^0-9]/{
        /^[0-9]/s/ [0-9] / ;&/g
        H;$!d
    };x;y/\n/<tab>/
' <<\DATA
0
name_surname
1 yellow 1 brown 2 green
 short description

1
name2_surname
2 paisley 4 yellow 1 brown 2 green
 short description
2
name3_surname
1 blue
 short description
DATA

Observe que <tab> no y/\n/<tab>/ deve ser um caractere <tab> real.

###OUTPUT###

0       name_surname    1 yellow ; 1 brown ; 2 green     short description
1       name2_surname   2 paisley ; 4 yellow ; 1 brown ; 2 green         short description
2       name3_surname   1 blue   short description
    
por 23.06.2014 / 08:16

Tags