Script Shell pour parser un fichier txt
Résolu
pcsystemd
Messages postés
702
Date d'inscription
Statut
Membre
Dernière intervention
-
pcsystemd Messages postés 702 Date d'inscription Statut Membre Dernière intervention -
pcsystemd Messages postés 702 Date d'inscription Statut Membre Dernière intervention -
A voir également:
- Script Shell pour parser un fichier txt
- Fichier bin - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Fichier rar - Guide
- Classic shell - Télécharger - Personnalisation
6 réponses
coucouille,
çà sent le awk tout çà ...
j'ai commencé un peu à tripatouiller ton fichier, mais je ne suis pas une star du awk mais j'obtiens un début de réponse : on doit pouvoir beaucoup plus simple à mon avis ....
=> cat new | awk '{FS="|"; print "il y a "$2" news pour le nom "$1" en date du "$3""""}'
çà donne pour le moment :
il y a 986541 news pour le nom toto_tu en date du 2008-09-15
il y a 8954 news pour le nom liste_tu en date du 2008-09-15
il y a liste_ta news pour le nom tat_te en date du 81062
il y a 4926458 news pour le nom toto_tu en date du 2008-09-15
il y a 133346389 news pour le nom news_autre en date du 2008-09-15
il y a tata_te news pour le nom en date du 3440070
il y a news pour le nom en date du
reste à revoir au niveau des champs car apparement ils ne sont pas toujours dans le même ordre ...
++
Poulpoul
çà sent le awk tout çà ...
j'ai commencé un peu à tripatouiller ton fichier, mais je ne suis pas une star du awk mais j'obtiens un début de réponse : on doit pouvoir beaucoup plus simple à mon avis ....
=> cat new | awk '{FS="|"; print "il y a "$2" news pour le nom "$1" en date du "$3""""}'
çà donne pour le moment :
il y a 986541 news pour le nom toto_tu en date du 2008-09-15
il y a 8954 news pour le nom liste_tu en date du 2008-09-15
il y a liste_ta news pour le nom tat_te en date du 81062
il y a 4926458 news pour le nom toto_tu en date du 2008-09-15
il y a 133346389 news pour le nom news_autre en date du 2008-09-15
il y a tata_te news pour le nom en date du 3440070
il y a news pour le nom en date du
reste à revoir au niveau des champs car apparement ils ne sont pas toujours dans le même ordre ...
++
Poulpoul
Salut,
en fait ton affichage n'est pas correct puisque 986541 n'est pas le nombre mais le numéro
il demande nombre de numéro
en fait ton affichage n'est pas correct puisque 986541 n'est pas le nombre mais le numéro
il demande nombre de numéro
Je vais essayé de mieux m'expliquer.
Il y a 5 champs séparés par un | .Le premier champ peut être vide ou non vide :
Je souhaite pouvoir formater mon fichier de sorte a pouvoir l'utiliser pour faire un INSERT INTO dans ma BD.
Mon fichier de sortie doit être de la sorte :
Exemple :
INSERT INTO Information (prov, name, home, date, tdr) VALUES ('', 'list_a', 84465, '10-Jan-1999', 0)
INSERT INTO Information (prov, name, home, date, tdr) VALUES ('', 'list_b', 81669, '10-Jan-1999', 5197 )
INSERT INTO Information (prov, name, home, date, tdr) VALUES ('Loc_sio', 'list_a', 84465, '10-Jan-1999', 0)
Merci
Mon fichier texte comporte un grand nombre de lignes de ce style : |list_a|84465|2008-09-15|0 |list_b|81669|2008-09-15|5197 Loc_sio|liste_agence|84465|2008-09-15|0 |list_a|170694006|2008-09-15|0 |list_b|83255|2008-09-15|11323 |det_b|85083|2008-09-15|9609
Il y a 5 champs séparés par un | .Le premier champ peut être vide ou non vide :
|list_a|84465 |2008-09-15 |0 |list_b|81669 |2008-09-15|5197 Loc_sio|list_a|84465 |2008-09-15|0 |list_a|170694006|2008-09-15|0 |list_b|83255 |2008-09-15|11323 |det_b|85083 |2008-09-15|9609
Je souhaite pouvoir formater mon fichier de sorte a pouvoir l'utiliser pour faire un INSERT INTO dans ma BD.
Mon fichier de sortie doit être de la sorte :
Exemple :
|list_a|84465 |2008-09-15|0 |list_b|81669 |2008-09-15|5197 Loc_sio|list_a|84465 |2008-09-15|0
INSERT INTO Information (prov, name, home, date, tdr) VALUES ('', 'list_a', 84465, '10-Jan-1999', 0)
INSERT INTO Information (prov, name, home, date, tdr) VALUES ('', 'list_b', 81669, '10-Jan-1999', 5197 )
INSERT INTO Information (prov, name, home, date, tdr) VALUES ('Loc_sio', 'list_a', 84465, '10-Jan-1999', 0)
Merci
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Salut,
;-))
[tmpfs]$ cat pcsystemd |list_a|84465 |2008-09-15|0 |list_b|81669 |2008-09-15|5197 Loc_sio|list_a|84465 |2008-09-15|0 [tmpfs]$ cat foo.sh #! /bin/bash IFS="|" while read -a line do echo "INSERT INTO Information (prov, name, home, date, tdr) VALUES ('${line[0]}', '${line[1]}', '${line[2]}', '$(date --date="${line[3]}" +%d-%b-%Y)', '${line[4]}')" done < <(sed 's/[ [:space:]]//g' pcsystemd) [tmpfs]$ ./foo.sh INSERT INTO Information (prov, name, home, date, tdr) VALUES ('', 'list_a', '84465', '15-sep-2008', '0') INSERT INTO Information (prov, name, home, date, tdr) VALUES ('', 'list_b', '81669', '15-sep-2008', '5197') INSERT INTO Information (prov, name, home, date, tdr) VALUES ('Loc_sio', 'list_a', '84465', '15-sep-2008', '0') [tmpfs]$PS. Enlever l'espace entre les crochets ouvrants de [ [:space:]]
;-))