Traitement fichier avec Sed, Awk ou autres
Résolu/Fermé
pcsystemd
Messages postés
689
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
16 octobre 2023
-
24 févr. 2016 à 10:02
pcsystemd Messages postés 689 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 16 octobre 2023 - 12 avril 2016 à 14:33
pcsystemd Messages postés 689 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 16 octobre 2023 - 12 avril 2016 à 14:33
A voir également:
- Traitement fichier avec Sed, Awk ou autres
- Fichier rar - Guide
- Fichier host - Guide
- Fichier iso - Guide
- Ouvrir fichier .bin - Guide
- Comment réduire la taille d'un fichier - Guide
4 réponses
dubcek
Messages postés
18676
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
29 novembre 2023
5 597
24 févr. 2016 à 11:28
24 févr. 2016 à 11:28
hello
$ awk 'BEGIN {FS=OFS="|"} {sub(",", ".", $20); sub(",", ".", $21); print}' fichier
1001|20015232851|||25 bld totl||75000|Paris||6|JOEAU|2206000|24/05/2013|25/06/2015||2001|2001|17592|C|48.860274|2.345089
1001|20015246491|||41 rue court||75000|Paris||6|CAENS|289000|28/02/2014|30/07/2015||2001|2001|16141|C|48.88000|2.32417
pcsystemd
Messages postés
689
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
16 octobre 2023
21
24 févr. 2016 à 10:39
24 févr. 2016 à 10:39
Bon finalement j'ai trouvé avec Sed.
Merci
sed -e 's/|\([0-9][0-9]\/[0-9][0-9]\/[0-9][0-9][0-9][0-9]\) [0-9][0-9]:[0-9][0-9]:[0-9][0-9]/|\1/g' -e 's/,/./g' fichier1 > fichier2
Merci
mamiemando
Messages postés
32777
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
29 novembre 2023
7 684
Modifié par mamiemando le 24/02/2016 à 10:46
Modifié par mamiemando le 24/02/2016 à 10:46
Ta solution ne limite pas la substitution aux colonnes 20 et 21. Avec awk :
Ou de manière plus lisible si tu passes par un fichier script.awk :
Puis :
Exemple :
Bonne chance
cat toto.txt | awk 'BEGIN {FS="|"} ; {printf("%s",$1); for(i=2;i<20;i++) printf("|%s",$(i)); for(i=20;i<22;i++){ s=$(i); gsub(/,/, ".", s); printf("|%s",s);} print "";}'
Ou de manière plus lisible si tu passes par un fichier script.awk :
BEGIN { FS="|" } { printf("%s", $1); for (i = 2; i < 20; i++) { printf("|%s", $(i)); } for (i = 20; i < 22; i++) { s = $(i); gsub(/,/, ".", s); printf("|%s", s); } print ""; }
Puis :
cat toto.txt | awk -f script.awk
Exemple :
(mando@velvet) (~) $ cat toto.txt | awk 'BEGIN {FS="|"} ; {printf("%s",$1); for(i=2;i<20;i++) printf("|%s",$(i)); for(i=20;i<22;i++){ s=$(i); gsub(/,/, ".", s); printf("|%s",s);} print "";}'
1001|20015232851|||25 bld totl||75000|Paris||6|JOEAU|2206000|24/05/2013|25/06/2015||2001|2001|17592|C|48.860274|2.345089
1001|20015246491|||41 rue court||75000|Paris||6|CAENS|289000|28/02/2014|30/07/2015||2001|2001|16141|C|48.88000|2.32417
Bonne chance
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 434
24 févr. 2016 à 11:31
24 févr. 2016 à 11:31
Salut mamiemando,
On doit pouvoir faire plus court…
On doit pouvoir faire plus court…
awk 'BEGIN {FS=OFS="|"}; { gsub(/,/, ".", $21); gsub(/,/, ".", $22); print }'
mamiemando
Messages postés
32777
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
29 novembre 2023
7 684
Modifié par mamiemando le 25/02/2016 à 11:04
Modifié par mamiemando le 25/02/2016 à 11:04
Merci pour cette remarque très pertinente, car aux index près (
Je ne savais pas qu'altérer
Edit : j'ai vu la réponse de dubcek après coup.
$20et
$21au lieu de
$21et
$22), c'est effectivement beaucoup plus simple !
awk 'BEGIN {FS = OFS = "|"}; { gsub(/,/, ".", $20); gsub(/,/, ".", $21); print }'
Je ne savais pas qu'altérer
$20et
$21permettait d'altérer implicitement
$0(implicitement passé en argument du dernier print). L'idée de changer
OFSpour éviter de le ré-indiquer dans le
Edit : j'ai vu la réponse de dubcek après coup.
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 434
>
mamiemando
Messages postés
32777
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
29 novembre 2023
25 févr. 2016 à 11:08
25 févr. 2016 à 11:08
Edit : j'ai vu la réponse de dubcek après coup.J'avais également vu sa réponse (antérieure à la mienne) qu'après avoir posté la mienne. De ce fait sa réponse est plus juste que la mienne, dubcek restant le Maître incontesté pour awk ;-)
pcsystemd
Messages postés
689
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
16 octobre 2023
21
12 avril 2016 à 14:33
12 avril 2016 à 14:33
Un peu tard mais merci a tous.