Usando Perl + ssconvert
(no pacote gnumeric
):
perl -F'2' -00ane 'BEGIN {$, = ","; $\ = "\n"; print("ID,Name,Age,Education")} my @f; foreach(@F) {s/.*?: +//; push(@f, $_)} print(@f)' test1.txt test2.txt | ssconvert fd://0 output.xls
O comando Perl lê test1.txt
e test2.txt
usando linhas em branco como separadores de registro e um caractere de nova linha como separadores de campo; ele imprime o cabeçalho ( Id,Name,Age,Education
) e para cada registro e para cada campo retira tudo antes do primeiro caractere após a seqüência de espaços após o primeiro caractere :
de cada campo e imprime o registro usando vírgulas como separadores de campo e uma nova linha caractere como separadores de registro (isto é, converte test1.txt
e test2.txt
em um CSV):
% cat test1.txt
ID : 1
Name: xxxx
Age: 33
Education: Mtech
ID: 2
Name: yyyy
Age: 22
Education: bsc
% cat test2.txt
ID : 3
Name: xxxx
Age: 33
Education: Mtech
ID: 4
Name: yyyy
Age: 22
Education: bsc
% perl -F'2' -00ane 'BEGIN {$, = ","; $\ = "\n"; print("ID,Name,Age,Education")} my @f; foreach(@F) {s/.*?: +//; push(@f, $_)} print(@f)' test1.txt test2.txt
ID,Name,Age,Education
1,xxxx,33,Mtech
2,yyyy,22,bsc
3,xxxx,33,Mtech
4,yyyy,22,bsc
O comando ssconvert
lê a partir de STDIN e converte o arquivo para uma planilha do Excel.
Se a instalação de gnumeric
para obter ssconvert
não for uma opção, você poderá usar apenas o comando Perl e importar o CSV para o Excel / qualquer que seja:
perl -F'2' -00ane 'BEGIN {$, = ","; $\ = "\n"; print("ID,Name,Age,Education")} my @f; foreach(@F) {s/.*?: +//; push(@f, $_)} print(@f)' test1.txt test2.txt >output.csv