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 ouvrir un fichier apk ? - Guide
- Comment réduire la taille d'un fichier pdf - Guide
4 réponses
zipe31
Messages postés
36317
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 557
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
18579
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
25 janvier 2023
5 582
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
36317
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 557
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
18579
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
25 janvier 2023
5 582
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
36317
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 557
>
dubcek
Messages postés
18579
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
25 janvier 2023
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
36317
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 557
>
zipe31
Messages postés
36317
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
36317
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 557
>
zipe31
Messages postés
36317
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
18579
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
25 janvier 2023
5 582
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
braza
>
dubcek
Messages postés
18579
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
25 janvier 2023
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
dubcek
Messages postés
18579
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
25 janvier 2023
5 582
>
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
braza
>
dubcek
Messages postés
18579
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
25 janvier 2023
24 mai 2016 à 14:00
24 mai 2016 à 14:00
Merci Merci j'ai compris
UnGnU
Messages postés
1156
Date d'inscription
lundi 2 mai 2016
Statut
Contributeur
Dernière intervention
22 décembre 2020
153
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