Récupérer caractère

Résolu/Fermé
rebel - 1 févr. 2016 à 19:04
 rebel - 4 févr. 2016 à 12:36
Bonjour,

Je suis un peu noob sur linux alors mes excuses par avance pour mon manque de vocabulaire ^^

J'ai un fichier toto qui contient une liste formatée ainsi :

machineX process1 process2 process3 process4
machineY process1 process2 process3 process4
machineZ process1 process2 process3 process4

je souhaiterais, par exemple, récupérer que le nom de la machine avec son process2 via une ligne de commande

lorsque je fais:
cat toto | grep "process2"

il me sort toute la ligne :
machineX process1 process2 process3 process4
machineY process1 process2 process3 process4
machineZ process1 process2 process3 process4


moi je voudrais:
machineX process2
machineY process2
machineZ process2

Sauriez vous m'aider svp ?

Merci.
A voir également:

3 réponses

chris79 Messages postés 97 Date d'inscription lundi 3 octobre 2005 Statut Membre Dernière intervention 1 février 2016 25
1 févr. 2016 à 21:18
Salut,

Il existe différents outils te permettant de faire ça comme sed ou awk.

Avec awk cela pourrait ressembler à ça sur un fichier toto.txt:

cat toto.txt |awk '/process2/ {print $1,$3}'

--> si la ligne contient la string "process2" alors afficher le 1er et le 3eme champs de cette ligne, la délimitation se faisant par défaut par l'espace.

awk '/process2/ {print $1,$3}' toto.txt

--> Petite optim : pas de raison d'utiliser le pipe dans ton cas, awk prend en argument le fichier.

awk -F ' ' '/process2/ {print $1,$3}' toto.txt

--> Pour finir, il peut être utile d'explicitement indiquer le délimiteur à utiliser via l'option -F

++
0
dubcek Messages postés 18758 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 24 décembre 2024 5 623
2 févr. 2016 à 11:04
hello
$ cut -d ' ' -f 1,3 fichier
machineX process2
machineY process2
machineZ process2
0
Hello et merci d'avoir pris le tps de me répondre,

En fait , ce que vous dites est juste mais ne correpsond pas à mon besoin (je me suis mal exprimé au départ).

Il faudrait faire une recherche de chaine de caractères par ligne.
"toto" ressemble en fait à :

machine1 reference process1*c:source process1*c:sink process2*abc process3*i:1 pmlo*i:2 process3*i:3
machine3 local process1*c:source process1*c:sink process2*i:1 process2*i:2 process2*i:3 process2*i:4 process2*i:5 process2*i:6
machine4 local process1*c:source process1*c:sink process2*i:1*source_dev process2*i:2*source2_dev process2*i:3 process3*i:3
machine5 local process1*c:source process1*c:sink process2*i:1 process2*i:2 process2*i:3 process2*i:4 process2*i:5
machine6 local process1*c:source process1*c:sink process2*i:1 process2*i:2 process3*i:3 process2*i:3 process2*i:4*source_dev


donc l'impression de colonne ne peut pas fonctionner car le "process3" n'est pas toujours à la même place.

Je ne sais pas si je suis bien clair alors n'hésitez pas à me dire ^^

Merci !
0
dubcek Messages postés 18758 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 24 décembre 2024 5 623
Modifié par dubcek le 4/02/2016 à 11:16
que faut-il extraire de ce fichier ?
ca ?
$ awk -v c="process3" '$0 ~ c {printf $1 " "; for (n=2; n<=NF; n++)if($n ~ c)printf $n " "; print ""}'  fichier
machine1 process3*i:1 process3*i:3
machine4 process3*i:3
machine6 process3*i:3
0
Le nom de la machine et le process 3.

Ce que je souhaite voir (car il n'ya pas de process 3 sur toutes les machines) :
machine1 process3*i:3
machine4 process3*i:3
machine6 process3*i:3


Merci
0
dubcek Messages postés 18758 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 24 décembre 2024 5 623
4 févr. 2016 à 11:18
j'ai modifié mon post précédent
0
dubcek Messages postés 18758 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 24 décembre 2024 5 623
4 févr. 2016 à 11:28
$ awk -v c="process3" '$0 ~ c {printf $1 " "; for (n=2; n<=NF; n++)if($n ~ c)p=$n; print p}' fichier
machine1 process3*i:3
machine4 process3*i:3
machine6 process3*i:3
0
rebel > dubcek Messages postés 18758 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 24 décembre 2024
Modifié par rebel le 4/02/2016 à 11:43
T'es une star !

Merci beaucoup, ca fait presque le job :)

Mais comment faire pour qu'il ne s'arrete pas à la 1ere occurence ?

Si j'ai sur une ligne :
machineX process1 process3 process3.A process4 process3.B

pour récupérer:
machineX process 3 process 3.A process3.B
?

Merci !!
0