#1 Le 20/08/2016, à 12: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
Dernière modification par strike07 (Le 20/08/2016, à 12:25)
Hors ligne
#2 Le 20/08/2016, à 12: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, à 12:25
- strike07
Re : récupérer une chaine de caractère sur deux[RESOLU]
Super ça fonctionne sans problèmes! merci beaucoup
Hors ligne
#4 Le 20/08/2016, à 12: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, à 16: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, à 10: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, à 10:57
- pingouinux
Re : récupérer une chaine de caractère sur deux[RESOLU]
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, à 14: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
Hors ligne
#9 Le 24/08/2016, à 15: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