Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[shell] manipulation de chaines

14 réponses
Avatar
julien.gautier
Bonjour,

une question probablement naïve...

Comment fait-on pour n'afficher qu'un mot/ensemble de
mots/caractère/ens. de caractères qui se trouve dans une chaine
(éventuellement dans un fichier texte) ?

Du genre :

- le fichier texte contient, sur la 1e ligne :

salut jean dupont
hello fabrice durand

- je veux récupérer seulement : "jean" ou bien seulement : "s" (1e
lettre du 1er mot), ou bien seulement "salut dupont", ou encore "hello"
(1e mot de la ligne 2), etc.


comment faire ?

Merci d'avance pour vos suggestions.
Comment faire ?

10 réponses

1 2
Avatar
Pascal Bourguignon
(Julien Gautier) writes:

Bonjour,

une question probablement naïve...

Comment fait-on pour n'afficher qu'un mot/ensemble de
mots/caractère/ens. de caractères qui se trouve dans une chaine
(éventuellement dans un fichier texte) ?

Du genre :

- le fichier texte contient, sur la 1e ligne :

salut jean dupont
hello fabrice durand

- je veux récupérer seulement : "jean" ou bien seulement : "s" (1e
lettre du 1er mot), ou bien seulement "salut dupont", ou encore "hello"
(1e mot de la ligne 2), etc.


comment faire ?


Il y a plein de façon de faire, mais awk parait assez indiqué:

seulement : "jean" : awk 'END{print "jean";}' < fichier.txt
seulement : "s" : awk 'END{print "s";}' < fichier.txt
seulement : "salut dupont" : awk 'END{print "salut dupont";}' < fichier.txt
1er lettre du 1er mot : awk '{print substr($1,1,1);}' < fichier.txt
1e mot de la ligne 2 : awk '{IF(NR=2){print $1}}' < fichier.txt


Bien entendu, le principal problème est celui de bien spécifier ce
qu'on veut.

Le mieux serait d'apprendre à se servir de quelques outils de base:

man sh
man bash
man sed
man awk
cd /bin ; for f in * ; do man $f ; done



--
__Pascal_Bourguignon__ . * * . * .* .
http://www.informatimago.com/ . * . .*
* . . / () . *
Living free in Alaska or in Siberia, a . . / . . * .
grizzli's life expectancy is 35 years, .*. / * . .
but no more than 8 years in captivity. . /* o .
http://www.theadvocates.org/ * '''||''' .
SCO Spam-magnet: ******************

Avatar
julien.gautier
Pascal Bourguignon wrote:


- le fichier texte contient, sur la 1e ligne :

salut jean dupont
hello fabrice durand

- je veux récupérer seulement : "jean" ou bien seulement : "s" (1e
lettre du 1er mot), ou bien seulement "salut dupont", ou encore "hello"
(1e mot de la ligne 2), etc.


comment faire ?


Il y a plein de façon de faire, mais awk parait assez indiqué:

seulement : "jean" : awk 'END{print "jean";}' < fichier.txt
seulement : "s" : awk 'END{print "s";}' < fichier.txt
seulement : "salut dupont" : awk 'END{print "salut dupont";}' < fichier.txt
1er lettre du 1er mot : awk '{print substr($1,1,1);}' < fichier.txt
1e mot de la ligne 2 : awk '{IF(NR=2){print $1}}' < fichier.txt




Merci beaucoup, cela va déjà m'aider.


Avatar
pierre.ducrot
Julien Gautier wrote:

Comment fait-on pour n'afficher qu'un mot/ensemble de
mots/caractère/ens. de caractères qui se trouve dans une chaine
(éventuellement dans un fichier texte) ?

Du genre :

- le fichier texte contient, sur la 1e ligne :

salut jean dupont
hello fabrice durand

- je veux récupérer seulement : "jean" ou bien seulement : "s" (1e
lettre du 1er mot), ou bien seulement "salut dupont", ou encore "hello"
(1e mot de la ligne 2), etc.


le awk est on ami!
si tes lignes sont dans le fichier toto.txt
awk '{ print $1 }' < toto.txt
écrit le premier mot, $2 le secon...

man awk pour les autres commandes.

--
Pierre

Avatar
Stephane Louise
Julien Gautier wrote:
Comment fait-on pour n'afficher qu'un mot/ensemble de
mots/caractère/ens. de caractères qui se trouve dans une chaine
(éventuellement dans un fichier texte) ?

Du genre :

- le fichier texte contient, sur la 1e ligne :

salut jean dupont
hello fabrice durand

- je veux récupérer seulement : "jean" ou bien seulement : "s" (1e
lettre du 1er mot), ou bien seulement "salut dupont", ou encore "hello"
(1e mot de la ligne 2), etc.


comment faire ?


Pour faire lapidaire :

man awk
man sed
man 7 regex
voire "man grep" dans certans cas.
Ensuite s'intéresser aux fonctionnalités de |,>,<,`, et des
fonctionnalités du shell comme "for".

mata ne
--
luigi

Avatar
Schmurtz
- le fichier texte contient, sur la 1e ligne :

salut jean dupont
hello fabrice durand


je suppose que c'est dans le fichier "test"

- je veux récupérer seulement : "jean"


cat test | sed 1!d | awk '{ print $2 }'

ou bien seulement : "s" (1e lettre du 1er mot),


cat test | sed 1!d | awk '{ print substr($1,1,1) }'

ou bien seulement "salut dupont",


cat test | sed 1!d | awk '{ print $1, $3 }'

ou encore "hello" (1e mot de la ligne 2), etc.


cat test | sed 2!d | awk '{ print $1 }'

pour plus d'info, lire les page de man de grep, sed et awk.
(si tu enlèves la commande sed, les opérations sont effectué sur chaque
ligne)

--
Schmurtz

Avatar
Pascal Bourguignon
Schmurtz writes:

- le fichier texte contient, sur la 1e ligne :

salut jean dupont
hello fabrice durand


je suppose que c'est dans le fichier "test"

- je veux récupérer seulement : "jean"


cat test | sed 1!d | awk '{ print $2 }'


Et zou! trois processus, trois programmes à apprendre, trois pages man à lire!

awk '{if(NR==1){print $2}}' < test

mais il voulais "jean", pas le deuxième mot de la première ligne!!!

awk 'END{print "jean"}'</dev/null
ou:
echo jean # si on veut bien lire man bash


Idem pour le reste...

--
__Pascal_Bourguignon__ . * * . * .* .
http://www.informatimago.com/ . * . .*
* . . / () . *
Living free in Alaska or in Siberia, a . . / . . * .
grizzli's life expectancy is 35 years, .*. / * . .
but no more than 8 years in captivity. . /* o .
http://www.theadvocates.org/ * '''||''' .
SCO Spam-magnet: ******************


Avatar
julien.gautier
Pascal Bourguignon wrote:

Et zou! trois processus, trois programmes à apprendre, trois pages man à lire!

awk '{if(NR==1){print $2}}' < test

mais il voulais "jean", pas le deuxième mot de la première ligne!!!


en fait, si....


awk 'END{print "jean"}'</dev/null
ou:
echo jean # si on veut bien lire man bash


Idem pour le reste...


Avatar
julien.gautier
Schmurtz wrote:

- le fichier texte contient, sur la 1e ligne :

salut jean dupont
hello fabrice durand


je suppose que c'est dans le fichier "test"

- je veux récupérer seulement : "jean"


cat test | sed 1!d | awk '{ print $2 }'

ou bien seulement : "s" (1e lettre du 1er mot),


cat test | sed 1!d | awk '{ print substr($1,1,1) }'

ou bien seulement "salut dupont",


cat test | sed 1!d | awk '{ print $1, $3 }'

ou encore "hello" (1e mot de la ligne 2), etc.


cat test | sed 2!d | awk '{ print $1 }'

pour plus d'info, lire les page de man de grep, sed et awk.
(si tu enlèves la commande sed, les opérations sont effectué sur chaque
ligne)



ok merci.


Avatar
Pascal Bourguignon
(Julien Gautier) writes:

Pascal Bourguignon wrote:

Et zou! trois processus, trois programmes à apprendre, trois pages man à lire!

awk '{if(NR==1){print $2}}' < test

mais il voulait "jean", pas le deuxième mot de la première ligne!!!


en fait, si....


D'où l'importance de bien spécifier ce que l'on veut!

Sinon, pour toutes ces questions, la réponse pourrait simplement être:
apprendre les bases d'unix, des shells et les commandes de base comme
ed, sed, awk, sort, etc (tout ce qu'il y a dans /bin et une bonne
partie de /usr/bin).


--
__Pascal_Bourguignon__ . * * . * .* .
http://www.informatimago.com/ . * . .*
* . . / () . *
Living free in Alaska or in Siberia, a . . / . . * .
grizzli's life expectancy is 35 years, .*. / * . .
but no more than 8 years in captivity. . /* o .
http://www.theadvocates.org/ * '''||''' .
SCO Spam-magnet: ******************


Avatar
Stephane CHAZELAS
2003-12-09, 14:50(+01), Pascal Bourguignon:
[...]
Sinon, pour toutes ces questions, la réponse pourrait simplement être:
apprendre les bases d'unix, des shells et les commandes de base comme
ed, sed, awk, sort, etc (tout ce qu'il y a dans /bin et une bonne
partie de /usr/bin).


On gagnera du temps (et beaucoup plus) en se contentant de perl
si on ne compte pas utiliser un shell par ailleurs (ce qui est
peut-être le cas pour un utilisateur de MacOSX).

--
Stéphane ["Stephane.Chazelas" arobase "free.fr"]

1 2