IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Alignement de ligne avec awk


Sujet :

Shell et commandes GNU

  1. #1
    Membre confirmé
    Profil pro
    ingénieur
    Inscrit en
    Septembre 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur

    Informations forums :
    Inscription : Septembre 2008
    Messages : 54
    Par défaut Alignement de ligne avec awk
    Bonjour à tous,

    je me casse la tête depuis un moment sur un petit problème d'alignement, ci-joint le soucis :

    soit ce fichier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Drive's position: DiskGroup: 26, Span: 0, Arm: 0
    Device Id: 37
    Media Type: Hard Disk Device
    Drive's position: DiskGroup: 25, Span: 0, Arm: 0
    Device Id: 36
    Media Type: Hard Disk Device

    J'aimerai une sortie de ce type :

    DiskGroup: 26 type: Hard Disk Id:

    Voilà ce que je fais mais ça me donne pas ce que je voudrais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    awk '{if ($1~/^Drive/){ printf "%s ",$4} else if (/Device/) print $3; else if (/Media/) print $3,$4}END{printf "\n"}' /tmp/fic
    26, 37
    Hard
    25, 36
    Hard
    8, 17
    Hard
    Qu'est-ce qui manque ? Merci à vous.

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 664
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 664
    Par défaut
    Bonjour,

    Qu'est-ce qui manque ?
    la construction d'une variable qui sera affichée à la fin (END) de la lecture du fichier.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre confirmé
    Profil pro
    ingénieur
    Inscrit en
    Septembre 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur

    Informations forums :
    Inscription : Septembre 2008
    Messages : 54
    Par défaut
    Bonjour,

    il faudrait mettre chaque élément dans une variable comme une boucle avec un tableau ?

  4. #4
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 664
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 664
    Par défaut
    heu, non. tu concatènes les données pertinentes.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var=""; /data1/{var=data1}; /data2/{var=var" - "data2
    etc...
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Membre confirmé
    Profil pro
    ingénieur
    Inscrit en
    Septembre 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur

    Informations forums :
    Inscription : Septembre 2008
    Messages : 54
    Par défaut
    Ah ok merci,

    finalement j'ai pu avoir ce que je voulais en faisant ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    awk '{if (/Drive/){ printf "%s","Device Group: "$4} else if (/Id/) printf "%s ","  Id: "$3; else if (/Media/) printf "%s\n",$3" "$4}END{printf "\n"}' /tmp/fi1
     
    Device Group: 26,  Id: 37 Hard Disk
    Device Group: 25,  Id: 36 Hard Disk
    Device Group: 8,  Id: 17 Hard Disk
    par contre j'essaye de comprendre pourquoi avec la précédente commande cela ne marchait pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    awk '{if ($1~/^Drive/){ printf "%s ",$4} else if (/Device/) print $3; else if (/Media/) print $3,$4}END{printf "\n"}' /tmp/fic
     
    26, 37
    Hard
    25, 36
    Hard
    8, 17
    Hard
    J'ai juste rajouter ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    printf "%s\n",$3" "$4

  6. #6
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 293
    Par défaut
    Bonjour

    • Code : Sélectionner tout - Visualiser dans une fenêtre à part
      awk '/^Drive/{printf $4;} /^Device/{printf(" %s ",$3);} /^Media/{print $3,$4;}' fichier.txt
    • printf ne fait pas de retour à la ligne par défaut alors que print, oui.
    • Attention : Les lignes qui ne commencent pas par Device ont le mot Device en plein milieu de la ligne.

  7. #7
    Membre confirmé
    Profil pro
    ingénieur
    Inscrit en
    Septembre 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur

    Informations forums :
    Inscription : Septembre 2008
    Messages : 54
    Par défaut
    Merci pour la précision

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Moyenne des lignes avec awk
    Par ugbsaintlouis dans le forum Shell et commandes GNU
    Réponses: 7
    Dernier message: 25/04/2014, 22h23
  2. Suppression de caracteres en fin de ligne avec awk ou sed
    Par julinho99 dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 04/11/2008, 18h03
  3. Lire un fichier ligne par ligne avec Awk
    Par Krispy dans le forum Linux
    Réponses: 8
    Dernier message: 07/09/2006, 15h14
  4. [Débutant] Aligner deux divs sur une ligne avec inline
    Par Braz dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 09/03/2006, 10h52
  5. Réponses: 5
    Dernier message: 09/01/2005, 19h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo