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 17/02/2015, à 00:29

tome80

[RESOLU]Comment trier un texte quand il y a un espace comme séparateur

Bonjour,

Je dois afficher les colonnes 2 et 12 (username et processus) de "top" pour une exercice.
top –b –n1 > topoutput.txt  pour capturer une instance top.
J'ai parcouru le forum et des solutions existent mais avec sed et awk (que je ne connais pas du tout et j'aurais du mal a expliquer que j'ai fait) or moi je cherche une solution simple de type "cut"

cut -d' ' -f1,12 nomdufichier

cela m'envoi des colonnes qui n'ont rien à voir...

j'ai essayé de convertir l'espace avec un ; avec tr -s " "";" nomdufichier | cut -d' ' -f1,12 nomdufichier mais ça ne fonctionne pas.
je suis pas loin mais je n'arrive plus j'en ai marre.

Pouvez vous m'aider SVP ?
merci d'avance

Dernière modification par tome80 (Le 22/02/2015, à 12:29)


..........quand il est éteint il ne rame pas, c'est sur ..........

Hors ligne

#2 Le 17/02/2015, à 04:11

J5012

Re : [RESOLU]Comment trier un texte quand il y a un espace comme séparateur

la sortie de top produit des caracteres binaires
http://www.thegeekstuff.com/2013/06/cut … -examples/

Hors ligne

#3 Le 17/02/2015, à 06:14

pingouinux

Re : [RESOLU]Comment trier un texte quand il y a un espace comme séparateur

Bonjour,
sed 's/ \+/\t/g' topoutput.txt | cut -f2,13
On remplace les espaces consécutives par une tabulation, qui est le séparateur de champs par défaut pour cut. Il y a un décalage de 1 colonne à cause de la tabulation en début de ligne.

Édité :
Avec awk

awk '{print $1" "$12}' topoutput.txt

Correction de la commande avec sed (voir #6)

sed 's/^ *//;s/ \+/\t/g' topoutput.txt | cut -f1,12

On supprime les espaces de tête, et on remplace les espaces consécutives par une tabulation, qui est le séparateur de champs par défaut pour cut.

Dernière modification par pingouinux (Le 19/02/2015, à 08:23)

Hors ligne

#4 Le 17/02/2015, à 10:08

Hizoka

Re : [RESOLU]Comment trier un texte quand il y a un espace comme séparateur

Sinon une approche différente mais au final plus simple pour les néophytes smile

top
[appuyer sur f]
[décocher les infos inutiles avec espace]
[appuyer sur echap]

Apres tu peux sauvegarder ton affichage avec SHIFT + W

top -b -n1
top - 09:06:37 up 16 min,  4 users,  load average: 5,25, 3,75, 2,39
Tasks: 256 total,   1 running, 255 sleeping,   0 stopped,   0 zombie
%Cpu(s):  4,9 us,  3,2 sy, 47,2 ni, 27,9 id, 16,7 wa,  0,0 hi,  0,1 si,  0,0 st
KiB Mem:   4047016 total,  3922800 used,   124216 free,   341424 buffers
KiB Swap:        0 total,        0 used,        0 free.  1748792 cached Mem

USER     COMMAND
hizoka   rsync
hizoka   amarok
root     init
root     kthreadd
root     ksoftirqd/0

le fichier de sauvegarde se trouve dans ~/.toprc, tu peux l'effacer pour remettre le logiciel avec ses config par defaut.

Dernière modification par Hizoka (Le 17/02/2015, à 10:09)


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#5 Le 18/02/2015, à 23:15

tome80

Re : [RESOLU]Comment trier un texte quand il y a un espace comme séparateur

Bonsoir à tous,

merci pingouinux & J5012, mais je voulais éviter sed & awk (dans la mesure su possible, sauf dernière recours, et suis pas loin )

Hizoka, oui top -b -n1 > top.txt capture une instance top dans le top.txt.

le problème c'est que cut -d' ' ne prend pas en compte les espaces comme séparateurs ...
or pour moi cut -d' ' -f2,12 doit envoyer la colonne 2 et 12 en tenant compte le séparateur "espace". or c'est pas le cas.
est-ce je me plante ou c'est impossible (avec cut) d'utiliser l'espace comme délimiteur ?

merci


..........quand il est éteint il ne rame pas, c'est sur ..........

Hors ligne

#6 Le 18/02/2015, à 23:31

pingouinux

Re : [RESOLU]Comment trier un texte quand il y a un espace comme séparateur

tome80 a écrit :

est-ce je me plante ou c'est impossible (avec cut) d'utiliser l'espace comme délimiteur

C'est possible, mais le problème est que tu as plusieurs espaces entre certaines colonnes, et ça change selon les lignes. C'est pour cela qu'en #3 j'utilise sed pour remplacer les espaces consécutives par une tabulation, mais on pourrait mettre une seule espace à la place.
Je viens de m'apercevoir que

sed 's/ \+/\t/g' topoutput.txt | cut -f2,13

ne marche pas, car il peut y avoir un nombre variable d'espaces en début de ligne (y compris zéro).
Il faut remplacer par ceci, qui supprime les espaces de tête

sed 's/^ *//;s/ \+/\t/g' topoutput.txt | cut -f1,12

Le plus simple est quand même awk.

Hors ligne

#7 Le 19/02/2015, à 09:24

Hizoka

Re : [RESOLU]Comment trier un texte quand il y a un espace comme séparateur

Hizoka, oui top -b -n1 > top.txt capture une instance top dans le top.txt.

Heuuu oui, je sais bien, j'ai bien compris...
je te donnais une façon de faire ou au final tu n'as pas besoin de commande...


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#8 Le 19/02/2015, à 10:10

credenhill

Re : [RESOLU]Comment trier un texte quand il y a un espace comme séparateur

hello
utiliser tr -s " " qui transforme un nombre quelconque d'espaces en un seul (pour cut)

Hors ligne

#9 Le 19/02/2015, à 15:14

tome80

Re : [RESOLU]Comment trier un texte quand il y a un espace comme séparateur

j'ai essayé avec tr -s de convertir les espaces en : mais soit je me plante quelques part soit c'est autre chose, ça ne fonctionne pas en tout cas.

tr -s " "":" | cut -d: -f2,12

si pas de choix je ferais avec awk tant pis, le pb c'est que je vais devoir m'y mettre avec awk et ça me parait difficile (même si pour cette cmd c'est presque logique $2 $12)

merci

Dernière modification par tome80 (Le 19/02/2015, à 15:16)


..........quand il est éteint il ne rame pas, c'est sur ..........

Hors ligne

#10 Le 19/02/2015, à 15:54

credenhill

Re : [RESOLU]Comment trier un texte quand il y a un espace comme séparateur

tr -s " " ne convertit pas, il remplace plusieurs espace par 1 seul, il faudrait faire : tr -s " " | tr " " ":"
awk est fait pour ça

Hors ligne

#11 Le 19/02/2015, à 18:24

Hizoka

Re : [RESOLU]Comment trier un texte quand il y a un espace comme séparateur

credenhill => merci, je ne connaissais pas tr -s " ".


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#12 Le 21/02/2015, à 00:30

tome80

Re : [RESOLU]Comment trier un texte quand il y a un espace comme séparateur

Bonsoir,

tr -s " "|tr " " ":" < Desktop/top.txt > tr.txt ne fonctionne pas , je l'ai probablement mal posé.

awk très bien, je prends. merci pingouinux.

si d'ici demain y a pas de solution avec tr et cut je cloture,

merci les gars.


..........quand il est éteint il ne rame pas, c'est sur ..........

Hors ligne

#13 Le 21/02/2015, à 06:35

pingouinux

Re : [RESOLU]Comment trier un texte quand il y a un espace comme séparateur

tome80 #12 a écrit :

tr -s " "|tr " " ":" < Desktop/top.txt > tr.txt ne fonctionne pas

C'est

tr -s " " < Desktop/top.txt | tr " " ":"  > tr.txt

Ajouté :
Tu peux aussi faire ceci

tr -s " " ":" < Desktop/top.txt > tr.txt

Dernière modification par pingouinux (Le 21/02/2015, à 08:44)

Hors ligne

#14 Le 22/02/2015, à 12:29

tome80

Re : [RESOLU]Comment trier un texte quand il y a un espace comme séparateur

Merci beaucoup, résolu.
je me souviendrais d'AWK (au moins pour ça)

a+


..........quand il est éteint il ne rame pas, c'est sur ..........

Hors ligne