Manipuler le contenue d'un fichier
Résolu/Fermé
A voir également:
- Manipuler le contenue d'un fichier
- Fichier rar - Guide
- Fichier host - Guide
- Fichier iso - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
4 réponses
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 407
Modifié par zipe31 le 22/05/2016 à 08:35
Modifié par zipe31 le 22/05/2016 à 08:35
Salut,
Le dernier pipe est supprimé par la commande
_______________________________ ☯ Zen my nuggets ☮ ______________________________
Faites un geste pour l'environnement, fermez vos fenêtres et adoptez un manchot… 🐧
$ cat plop
2016-04-21|20:01|216|No|BUG|4|1| 85|2016-04-2120:01+00:00|8
2016-04-21|20:01|218|No|BUG|1|0|0|2016-04-2120:01+00:00|3|
2016-04-22|20:02|220|No|BUG|4|3|0|2016-04-2122:01+00:00|10
2016-04-22|20:02|222|No|BUG|4|4|0|2016-04-2120:01+00:00|10|
2016-04-23|20:03|224|No|BUG|10|3|0|2016-04-2120:01+00:00|14
2016-04-21|20:01|217|No|BUG|6|3|0|2016-04-2120:01+00:00|11
2016-04-21|20:01|219|No|BUG|6|3|0|2016-04-2120:01+00:00|11|
$ sed 's/\(-[[:digit:]]\{2\}\)\([[:digit:]]\{2\}\)/\1 \2/;s/|$//' plop
2016-04-21|20:01|216|No|BUG|4|1| 85|2016-04-21 20:01+00:00|8
2016-04-21|20:01|218|No|BUG|1|0|0|2016-04-21 20:01+00:00|3
2016-04-22|20:02|220|No|BUG|4|3|0|2016-04-21 22:01+00:00|10
2016-04-22|20:02|222|No|BUG|4|4|0|2016-04-21 20:01+00:00|10
2016-04-23|20:03|224|No|BUG|10|3|0|2016-04-21 20:01+00:00|14
2016-04-21|20:01|217|No|BUG|6|3|0|2016-04-21 20:01+00:00|11
2016-04-21|20:01|219|No|BUG|6|3|0|2016-04-21 20:01+00:00|11
Le dernier pipe est supprimé par la commande
s/|$//, le $ après le pipe désignant la fin de ligne.
_______________________________ ☯ Zen my nuggets ☮ ______________________________
Faites un geste pour l'environnement, fermez vos fenêtres et adoptez un manchot… 🐧
Pour la suppression de dernier caractère pipe j'au utilise la commande
sed -e "s/|//g10" fichier_source > fichier_cible et ça marche
mais le nombre des caractères varie et cette comande remplace le pipe par espace appart ire de 10 ieme colon y a t il une manière d'utilise le séparateur pipe pour généralisé l’opération ?
sed -e "s/|//g10" fichier_source > fichier_cible et ça marche
mais le nombre des caractères varie et cette comande remplace le pipe par espace appart ire de 10 ieme colon y a t il une manière d'utilise le séparateur pipe pour généralisé l’opération ?
dubcek
Messages postés
18718
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
22 mars 2024
5 615
Modifié par dubcek le 22/05/2016 à 12:35
Modifié par dubcek le 22/05/2016 à 12:35
hello
$ awk 'BEGIN {FS=OFS="|"} /[|]$/ {NF--} {$0=gensub("(-[0-9]{2})([0-9]{2})(:[0-9]{2})[^|]*", "\\1 \\2\\3", 1); print }' fichier
2016-04-21|20:01|216|No|BUG|4|1| 85|2016-04-21 20:01|8
2016-04-21|20:01|218|No|BUG|1|0|0|2016-04-21 20:01|3
2016-04-22|20:02|220|No|BUG|4|3|0|2016-04-21 22:01|10
2016-04-22|20:02|222|No|BUG|4|4|0|2016-04-21 20:01|10
2016-04-23|20:03|224|No|BUG|10|3|0|2016-04-21 20:01|14
2016-04-21|20:01|217|No|BUG|6|3|0|2016-04-21 20:01|11
2016-04-21|20:01|219|No|BUG|6|3|0|2016-04-21 20:01|11
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 407
22 mai 2016 à 13:21
22 mai 2016 à 13:21
Salut dubcek,
Oups, je n'avais pas vu qu'il fallait aussi virer les +00:00 ;-\
Oups, je n'avais pas vu qu'il fallait aussi virer les +00:00 ;-\
sed 's/\(-[0-9]\{2\}\)\([0-9]\{2\}:[0-9]\{2\}\)+[^|]*/\1 \2/;s/|$//' fichier
dubcek
Messages postés
18718
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
22 mars 2024
5 615
22 mai 2016 à 13:44
22 mai 2016 à 13:44
y a-t-il une raison de ne pas utiliser sed -r pour éviter les \( et \{ ?
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 407
>
dubcek
Messages postés
18718
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
22 mars 2024
22 mai 2016 à 13:53
22 mai 2016 à 13:53
Pas spécialement, mais en retour il faudra protéger les crochets et autres caractères que je n'ai plus en tête ;-\
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 407
>
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
22 mai 2016 à 14:00
22 mai 2016 à 14:00
Laisse tomber, j'ai dit une connerie, il n'y a aucune raison de ne pas utiliser "-r", c'est juste que je n'y suis pas habitué ;-\
Les crochets n'ont pas besoin d'être protégés comme je l'ai dit… je suis un âne bâté ;-)
Les crochets n'ont pas besoin d'être protégés comme je l'ai dit… je suis un âne bâté ;-)
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 407
>
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
22 mai 2016 à 14:09
22 mai 2016 à 14:09
La syntaxe allégée ;-))
sed -r 's/(-[0-9]{2})([0-9]{2}:[0-9]{2})\+[^|]*/\1 \2/;s/|$//'
Merci pour tout vos réponses et dans le cas ou le pipe se répété par exemple :
2016-04-21|20:01|216|No|BUG|4|1| 85|2016-04-21 20:01|8||
2016-04-21|20:01|218|No|BUG|1|0|0|2016-04-21 20:01|3|
2016-04-22|20:02|220|No|BUG|4|3|0|2016-04-21 22:01|10||
2016-04-22|20:02|222|No|BUG|4|4|0|2016-04-21 20:01|10|
2016-04-23|20:03|224|No|BUG|10|3|0|2016-04-21 20:01|14||
2016-04-21|20:01|217|No|BUG|6|3|0|2016-04-21 20:01|11|
2016-04-21|20:01|219|No|BUG|6|3|0|2016-04-21 20:01|11||
2016-04-21|20:01|216|No|BUG|4|1| 85|2016-04-21 20:01|8||
2016-04-21|20:01|218|No|BUG|1|0|0|2016-04-21 20:01|3|
2016-04-22|20:02|220|No|BUG|4|3|0|2016-04-21 22:01|10||
2016-04-22|20:02|222|No|BUG|4|4|0|2016-04-21 20:01|10|
2016-04-23|20:03|224|No|BUG|10|3|0|2016-04-21 20:01|14||
2016-04-21|20:01|217|No|BUG|6|3|0|2016-04-21 20:01|11|
2016-04-21|20:01|219|No|BUG|6|3|0|2016-04-21 20:01|11||
dubcek
Messages postés
18718
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
22 mars 2024
5 615
23 mai 2016 à 12:41
23 mai 2016 à 12:41
essayer
$ awk 'BEGIN {FS=OFS="|"} {sub("[|]*$", ""); print gensub("(-[0-9]{2})([0-9]{2})(:[0-9]{2})[^|]*", "\\1 \\2\\3", 1)}' fichier
UnGnU
Messages postés
1158
Date d'inscription
lundi 2 mai 2016
Statut
Contributeur
Dernière intervention
22 décembre 2020
157
23 mai 2016 à 12:47
23 mai 2016 à 12:47
Voir aussi :
sed -r 's/(-[0-9]{2})([0-9]{2}:[0-9]{2})\+[^|]*/\1 \2/;s/\|\|*$//' fichier
braza
>
dubcek
Messages postés
18718
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
22 mars 2024
Modifié par braza le 23/05/2016 à 13:01
Modifié par braza le 23/05/2016 à 13:01
Merci c très gentil de vos part mais juste svp un petit commentaire su la commande pcq j'ai pas bien compris comment elle fonctions exactement
braza
>
UnGnU
Messages postés
1158
Date d'inscription
lundi 2 mai 2016
Statut
Contributeur
Dernière intervention
22 décembre 2020
23 mai 2016 à 13:07
23 mai 2016 à 13:07
Merci c très gentil de vos part mais juste svp un petit commentaire su la commande pcq j'ai pas bien compris comment elle fonctions exactement et je vous demande de me excuse a ce derengement
dubcek
Messages postés
18718
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
22 mars 2024
5 615
>
braza
23 mai 2016 à 13:17
23 mai 2016 à 13:17
sub("[|]*$", "") on supprime tout les | en fin de ligne
gensub("(-[0-9]{2})([0-9]{2}) on groupe - 2 chiffres puis 2 chiffres dans 1 et 2
(:[0-9]{2}) on groupe : 2 chiffres dans 3
[^|]* tout ce qui suit jusqu'à | n'est pas mis dans un groupe, pas de (), donc sera éliminé
"\\1 \\2\\3" on remet les groupes, avec un espace entre 1 et 2
gensub("(-[0-9]{2})([0-9]{2}) on groupe - 2 chiffres puis 2 chiffres dans 1 et 2
(:[0-9]{2}) on groupe : 2 chiffres dans 3
[^|]* tout ce qui suit jusqu'à | n'est pas mis dans un groupe, pas de (), donc sera éliminé
"\\1 \\2\\3" on remet les groupes, avec un espace entre 1 et 2