Récupérer une information pour s'en servir comme variable

Fermé
charline159 Messages postés 208 Date d'inscription lundi 14 août 2017 Statut Membre Dernière intervention 22 juin 2022 - Modifié le 2 mai 2021 à 17:43
jee pee Messages postés 39696 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 7 mai 2024 - 5 mai 2021 à 14:05
Bonjour,
J'aimerais savoir comment faire pour récupérer une information depuis la sortie (affichée dans le terminal) pour pouvoir s'en servir dans les commandes suivantes (à l'aide d'un pipe). Par exemple, pour l'afficher avec echo, ou pour boucler avec.

Par exemple, si dans mon terminal, l'affichage d'un fichier (avec
cat file
) me renvoie le résultat suivant:
3

En chaînant mon
cat file
directement avec un pipe
|
, comment puis-je récupérer le 3 afin de l'afficher avec un echo? J'ai déjà essayé ceci, mais ça ne marche pas:
cat file | xargs echo


ou encore ceci pour faire une boucle:
cat file | for i in $(xargs); echo hello; done


sans succès...


Des idées ?
A voir également:

3 réponses

jee pee Messages postés 39696 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 7 mai 2024 9 258
Modifié le 2 mai 2021 à 19:20
Bonjour,

Pour moi avec xargs cela fonctionne. Mais si tu veux le contenu du fichier dans une variable tu peux aussi faire :

 linuxlite  ~  cat file.txt|xargs echo
3
 linuxlite  ~  va=$(cat file.txt) && echo $va
3



0
charline159 Messages postés 208 Date d'inscription lundi 14 août 2017 Statut Membre Dernière intervention 22 juin 2022 1
2 mai 2021 à 19:27
Salut,

Effectivement, ça fonctionne dans le cas simple que je donne en exemple, c'est-à-dire en faisant :
cat file | xargs echo
mais par contre si je fais un traitement à partir d'un fichier, par exemple si je souhaite récupérer le chiffre à partir d'un enchaînement de cat, sort, uniq, sed, cut, comme ceci:
cat file | sort | uniq -c | sort | tail -n 1 | sed 's/ *//' | cut -c 1

je n'arrive pas à réuiliser le chiffre en sortie, avec
 | xargs echo
: ça ne marche pas.

Pourquoi est-ce que ça marcherait dans certains cas et pas dans d'autres?

(Et pour la boucle, ça ne fonctionne vraiment pas chez moi. J'ai peut-être fait une erreur dans sa syntaxe.)
0
jee pee Messages postés 39696 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 7 mai 2024 9 258
Modifié le 2 mai 2021 à 20:00
Ta commande en elle même renvoie déjà un résultat, xargs n'apporte rien sauf si tu rajoutes autre chose

 linuxlite  ~  cat file.txt | sort | uniq -c | sort | tail -n 1 | sed 's/ *//' | cut -c 1
1
 linuxlite  ~  cat file.txt | sort | uniq -c | sort | tail -n 1 | sed 's/ *//' | cut -c 1|xargs echo
1
 linuxlite  ~  cat file.txt | sort | uniq -c | sort | tail -n 1 | sed 's/ *//' | cut -c 1|echo "hello"
hello
 linuxlite  ~  0  0  0  0  0  0  141  0  cat file.txt | sort | uniq -c | sort | tail -n 1 | sed 's/ *//' | cut -c 1|xargs echo "hello"
hello 1


je suis en bash

0
charline159 Messages postés 208 Date d'inscription lundi 14 août 2017 Statut Membre Dernière intervention 22 juin 2022 1
5 mai 2021 à 13:09
Oui, en soit le echo ne rajoute rien, c'était juste un exemple pour illustrer ce que je souhaite faire: prendre le résultat affiché (par exemple, "3") pour m'en servir comme variable, par exemple dans une boucle:
for i in $(xargs); echo hello; done
0
jee pee Messages postés 39696 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 7 mai 2024 9 258
Modifié le 5 mai 2021 à 13:27
la variable dans la boucle c'est ${i}
linuxlite  ~  cat file.txt
aaa
bbb
ccc
 linuxlite  ~  cat file.txt|for i in $(xargs); do echo -n "${i} "; done
aaa bbb ccc 
 linuxlite  ~  cat file.txt|for i in $(xargs); do echo hello ; done
hello
hello
hello
0
jee pee Messages postés 39696 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 7 mai 2024 9 258 > jee pee Messages postés 39696 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 7 mai 2024
5 mai 2021 à 14:05
ou aussi
 linuxlite  ~  echo 33|xargs -i echo {}
33
0