web-dev-qa-db-fra.com

Exécuter un script Shell pour extraire un fichier et le convertir au format Excel

J'ai des données dans deux fichiers différents appelés test1.txt et test2.txt, comme:

ID : 1
Name: xxxx
Age: 33
Education: Mtech

ID: 2
Name: yyyy
Age: 22
Education: bsc

Je veux imprimer ces lignes en utilisant un script Shell comme ceci:

 1
 xxxx 
 33
 mtech
 2
 yyyy
 22
 bsc

et puis je veux convertir cette sortie au format Excel. Le format ressemble à celui ci-dessous:

 ID Name    Age Education
 1  xxx     33  mtech
 2  yyy     22  bsc

Comment puis-je convertir comme ça?

2
Beginner

Utilisation de Perl + ssconvert (dans le package gnumeric):

Perl -F'\012' -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

La commande Perl lit test1.txt et test2.txt en utilisant des lignes vides comme séparateurs d'enregistrement et des caractères de nouvelle ligne comme séparateurs de champ; il imprime l'en-tête (Id,Name,Age,Education) et pour chaque enregistrement et toutes les bandes de champs, tout ce qui précède le premier caractère suivant la séquence d'espaces suivant le premier : caractère de chaque champ et imprime l'enregistrement en utilisant des virgules comme champ des séparateurs et un caractère de nouvelle ligne en tant que séparateur d'enregistrement (c.-à-d. qu'il convertit test1.txt et test2.txt en un fichier 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'\012' -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

La commande ssconvert lit à partir de STDIN et convertit le fichier en feuille de calcul Excel.

Si installer gnumeric pour obtenir ssconvert n’est pas une option, vous pouvez utiliser uniquement la commande Perl et importer le fichier CSV dans Excel/peu importe:

Perl -F'\012' -00ane 'BEGIN {$, = ","; $\ = "\n"; print("ID,Name,Age,Education")} my @f; foreach(@F) {s/.*?: +//; Push(@f, $_)} print(@f)' test1.txt test2.txt >output.csv
2
kos
awk 'NR==1{print $1,$3,$5,$7}
          {print $2,$4,$6,$8}' FS='[\\n:] *' OFS='\t' RS='' t*.txt > out.tsv

gnumeric out.tsv    #  Excel or libreoffice, whatever

Et comme @kos a présenté, nous pouvons le convertir en un monde de formats différents ...

ssconvert out.tsv out.tex
ssconvert out.tsv out.pdf  
1
user216043