KSH : mise en forme colonne vers format csv
Résolu/Fermé
dofre114
-
Modifié le 12 janv. 2022 à 12:47
dubcek Messages postés 18758 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 24 décembre 2024 - 12 janv. 2022 à 18:00
dubcek Messages postés 18758 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 24 décembre 2024 - 12 janv. 2022 à 18:00
A voir également:
- KSH : mise en forme colonne vers format csv
- Ksh vs sh - Forum Shell
- [KSH] test argument expected ✓ - Forum Shell
- Ksh et sqlplus--passage de parametres - Forum Programmation
- Executer des requetes sql dans un .ksh ✓ - Forum Shell
2 réponses
mamiemando
Messages postés
33446
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
20 décembre 2024
7 812
12 janv. 2022 à 13:05
12 janv. 2022 à 13:05
Bonjour,
Je te propose cette solution, écrite en python, car en shell c'est un peu "compliqué" à écrire surtout si tu n'as pas d'a priori sur les clés impliquées dans ton fichier.
... ce qui donne à l'exécution.
Bonne chance
Je te propose cette solution, écrite en python, car en shell c'est un peu "compliqué" à écrire surtout si tu n'as pas d'a priori sur les clés impliquées dans ton fichier.
#!/usr/bin/env python3 import sys filename = sys.argv[1] entries = list() keys = set() entry = dict() with open(filename) as f: for line in f.readlines(): line = line.strip() if line == "BEGIN": entry = dict() elif line == "END": entries.append(entry) else: sp = line.split("=") assert len(sp) > 1 key = sp[0] value = "".join(sp[1:]) entry[key] = value keys.add(key) keys = sorted(keys) print(";".join(keys)) print("\n".join( ";".join( entry.get(key, "") for key in keys ) for entry in entries ))
... ce qui donne à l'exécution.
(mando@silk) (~) $ python3 toto.py fichier.txt
A;B;C;D;E;F;G;H
toto;tata;;;;;;titi
toto;titi;tata;toto;;;;
;;;toto;titi;tata;tutu;tete
Bonne chance
dubcek
Messages postés
18758
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
24 décembre 2024
5 623
12 janv. 2022 à 18:00
12 janv. 2022 à 18:00
hello
$ cat f3.awk
BEGIN { s=split("A B C D E F G H", t); FS="="}
/BEGIN/ {++n; next}
/=/ {t2[n][$1]=$2}
END {for(x=1; x<=s; x++)printf "%s%c", t[x], x==s? "\n": ";"
for(x=1; x<=n; x++)for(z=1; z<=s; z++)printf "%s%c", t2[x][t[z]], z==s? "\n": ";"}
$
$ awk -f f3.awk fichier.txt
A;B;C;D;E;F;G;H
toto;tata;;;;;;titi
toto;titi;tata;toto;;;;
;;;toto;titi;tata;tutu;tete