#1 Le 16/10/2020, à 19:32
- Mehdouch
Couper une chaîne de caractère dans un fichier
Bonjour la communauté.
J'ai un fichier texte qui contient des chiffres séparés à certains endroits avec des espaces:
122862324313212465131261345231523415352163453136431326431045452542451214564225564321361650545210208814722066034489802044511230157626158697538374264328643428667972353241634912464340045467246640416437352023.
Ce que je veux c'est avoir le 1er caractère le 6ème le 11ème le 16ème ... jusqu'à la fin.
Je peux le faire avec cut -c1,6,11,16........... jusqu'à la fin. Mais si le fichier est long ça risque d'être pénible.
Avez vous des idées svp ?
Merci d'avance.
Hors ligne
#2 Le 16/10/2020, à 20:01
- Watael

Re : Couper une chaîne de caractère dans un fichier
salut,
sed est plus indiqué, ici.
Welcome to sHell. · eval is evil.
Hors ligne
#3 Le 16/10/2020, à 21:09
- grigouille

Re : Couper une chaîne de caractère dans un fichier
hormis le retour à la ligne je ne vois pas d'espace.
Xubuntu 20.04
HP LaserJet M1132 MFP
Hors ligne
#4 Le 17/10/2020, à 09:09
- pingouinux

Re : Couper une chaîne de caractère dans un fichier
Bonjour,
Avec la ligne que tu as donnée, voici 3 méthodes : sed, awk, python3
s="122862324313212465131261345231523415352163453136431326431045452542451214564225564321361650545210208814722066034489802044511230157626158697538374264328643428667972353241634912464340045467246640416437352023"
sed -r 's/(.)(.{4}|.{0,3}$)/\1/g' <<<"$s"
awk '{for(i=1;i<=length($0);i+=5)printf("%s",substr($0,i,1));print""}' <<<"$s"
python3 -c 'import sys;print(sys.argv[1][::5])' "$s"qui donnent toutes ce résultat
12141455611342124650104050268668724607442Hors ligne
#5 Le 17/10/2020, à 09:19
- Watael

Re : Couper une chaîne de caractère dans un fichier
pourquoi |.{0,3}$ ?
Welcome to sHell. · eval is evil.
Hors ligne
#6 Le 17/10/2020, à 09:41
- pingouinux

Re : Couper une chaîne de caractère dans un fichier
pourquoi |.{0,3}$ ?
Parce que sinon, si le nombre de caractères n'est pas multiple de 5, il y a des caractères en trop.
$ sed -r 's/(.).{4}/\1/g' <<<"12345678"
1678Ajouté :
$ sed -r 's/(.)(.{4}|.{0,3}$)/\1/g' <<<"12345678"
16Dernière modification par pingouinux (Le 17/10/2020, à 09:48)
Hors ligne
#7 Le 17/10/2020, à 09:50
- Watael

Re : Couper une chaîne de caractère dans un fichier
merci.
Welcome to sHell. · eval is evil.
Hors ligne
#8 Le 17/10/2020, à 19:16
- Mehdouch
Re : Couper une chaîne de caractère dans un fichier
s="122862324313212465131261345231523415352163453136431326431045452542451214564225564321361650545210208814722066034489802044511230157626158697538374264328643428667972353241634912464340045467246640416437352023"
sed -r 's/(.)(.{4}|.{0,3}$)/\1/g' <<<"$s"Ça marche très bien avec sed. C'est incroyable comment cette commande peut être utile.
Pouvez-vous juste m'expliquer la syntaxe pour que je puisse l'utiliser moi même dans le futur.
Et merci beaucoup.
Hors ligne
#9 Le 17/10/2020, à 20:44
- pingouinux

Re : Couper une chaîne de caractère dans un fichier
Pouvez-vous juste m'expliquer la syntaxe pour que je puisse l'utiliser moi même dans le futur.
sed 's/expression à remplacer/texte de remplacement/g' <<<"texte_qui_nous intéresse"Le g final indique que l'on veut répéter l'opération sur la ligne.
(.)(.{4}|.{0,3}$)(.) : 1 caractère quelconque
.{4} : suivi de 4 caractères quelconques
| : ou
.{0,3} : 0 à 3 caractères quelconques
$ : en fin de ligne
\1C'est le contenu du couple de parenthèses correspondant à la 1ère parenthèse ouvrante de l'expression précédente (ici, le premier caractère d'une série de 5 (ou moins si on atteint la fin de ligne)).
Hors ligne
#10 Le 17/10/2020, à 22:12
- Mehdouch
Re : Couper une chaîne de caractère dans un fichier
C'est parfait.. Merci pingouinux ![]()
Hors ligne
#11 Le 18/10/2020, à 03:31
- nany

Re : Couper une chaîne de caractère dans un fichier
Bonjour,
Watael a écrit :pourquoi |.{0,3}$ ?
Parce que sinon, si le nombre de caractères n'est pas multiple de 5, il y a des caractères en trop.
$ sed -r 's/(.).{4}/\1/g' <<<"12345678" 1678Ajouté :
$ sed -r 's/(.)(.{4}|.{0,3}$)/\1/g' <<<"12345678" 16
$ sed -E 's/(.).{0,4}/\1/g' <<<"12345678"
16![]()
Hors ligne
#12 Le 18/10/2020, à 05:48
- pingouinux

Re : Couper une chaîne de caractère dans un fichier
Bien vu, nany ! Je me suis compliqué la vie, sur ce coup-là… ![]()
Hors ligne
#13 Le 18/10/2020, à 07:59
- Zakhar
Re : Couper une chaîne de caractère dans un fichier
Pouvez-vous juste m'expliquer la syntaxe pour que je puisse l'utiliser moi même dans le futur.
![]()
Si tu as la patience de lire un roman de 200 pages... on peut tenter l'explication de la syntaxe de sed. ![]()
Et oui, c'est un outil super puissant pour manipuler des fichiers texte !
"A computer is like air conditioning: it becomes useless when you open windows." (Linus Torvald)
Hors ligne