Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 20/08/2016, à 13:02

strike07

récupérer une chaine de caractère sur deux[RESOLU]

Bonjour,

Voilà mon problème, je cherche à extraire en bash une chaine de caractère sur deux séparé par un espace comme ceci:
passer de ça:

telephone telephoner frigo refroidir ampoule allumer

à ça:

telephone frigo ampoule

la seul solution provisoir que j'ai trouvé est la suivante:

echo "telephone telephoner frigo refroidir ampoule allumer" | cut -d" " -f1,3,5,7,9,11

Le problème étant que si on a une très longue chaine de caractère, cela ne se fait pas automatiquement du fait que -f ne s'applique que pour les 6 premières chaines...

merci d'avance pour vos réponses smile

Dernière modification par strike07 (Le 20/08/2016, à 13:25)

Hors ligne

#2 Le 20/08/2016, à 13:21

pingouinux

Re : récupérer une chaine de caractère sur deux[RESOLU]

Bonjour,

$ awk '{for(i=1;i<=NF;i+=2)printf("%s ",$i);printf("\n")}' <<<"telephone telephoner frigo refroidir ampoule allumer"
telephone frigo ampoule

Hors ligne

#3 Le 20/08/2016, à 13:25

strike07

Re : récupérer une chaine de caractère sur deux[RESOLU]

Super ça fonctionne sans problèmes! merci beaucoup smile

Hors ligne

#4 Le 20/08/2016, à 13:46

pingouinux

Re : récupérer une chaine de caractère sur deux[RESOLU]

Autre façon de faire :

$ tab=(telephone telephoner frigo refroidir ampoule allumer)
$ for i in $(seq 1 2 ${#tab[@]}); do printf "${tab[i-1]} ";done; echo
telephone frigo ampoule

Hors ligne

#5 Le 21/08/2016, à 17:44

pingouinux

Re : récupérer une chaine de caractère sur deux[RESOLU]

Tu as même plus simple :

$ (printf "%s %n" telephone telephoner frigo refroidir ampoule allumer; echo)
telephone frigo ampoule

Les parenthèses ont pour but d'exécuter la commande dans un sous-shell, pour ne pas créer les variables d'environnement telephoner, refroidir et allumer dans le shell courant.

Hors ligne

#6 Le 23/08/2016, à 11:09

strike07

Re : récupérer une chaine de caractère sur deux[RESOLU]

au fait, printf n'est pas une commande provenant du C ?

Hors ligne

#7 Le 23/08/2016, à 11:57

pingouinux

Re : récupérer une chaine de caractère sur deux[RESOLU]

strike07 a écrit :

au fait, printf n'est pas une commande provenant du C ?

C'est en effet une fonction C, mais c'est aussi une commande bash.

Hors ligne

#8 Le 24/08/2016, à 15:16

strike07

Re : récupérer une chaine de caractère sur deux[RESOLU]

ah bon.
en fait je pensais que c'était un système qui permettait de compiler un petit morceau de C pour une action complexe puis qui l'exécutait dans le shell...
en tout cas merci de la précision smile

Hors ligne

#9 Le 24/08/2016, à 16:50

pingouinux

Re : récupérer une chaine de caractère sur deux[RESOLU]

Voici quelques informations sur printf, mais je n'en sais pas plus :

$ type printf
printf is a shell builtin

$ which printf
/usr/bin/printf

$ file /usr/bin/printf
/usr/bin/printf: ELF 64-bit LSB  executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=8b00e1432e9743b6df71197b2d4c668537dae159, stripped

Hors ligne