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 :

Retirer les espaces dans une chaine


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Mai 2014
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 75
    Par défaut Retirer les espaces dans une chaine
    Bonjour,

    Disposant d'un fichier avec n entrées je souhaite extraire une ou deux colonnes bien spécifiques (je suis parti sur awk) cependant, ces colonnes ne peuvent être extraites avec un simple awk puisque malheureusement des espaces y sont glissés.
    exemple de fichier travail
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Tue-19/03/19-06:30:08 06:38:04-Tue-19/03 AUTO Job:XXXJCT3 ,RESULT= 0 tps=00:07:56
    Tue-19/03/19-06:31:43 06:45:37-Tue-19/03 AUTO Job:XXXJCA7 ,RESULT= 0 tps=00:13:53
    mar-19/03/19-08:53:49 09:08:17-mar-19/03 AUTO Job: XXXJCT4 ,RESULT= 0 tps=00:14:28
    wed-20/03/19-00:01:21 00:01:21-wed-20/03 AUTO Job:XXXJC16 ,RESULT= 0 tps=00:00/00
    ven-22/03/19-13:09:12 13:22:54-ven-22/03 AUTO Job: XXXJCT4 ,RESULT= 0 tps=00:13:42
    sat-20/03/19-20:01:21 00:01:21-sat-20/03 AUTO Job:XXXJC16 ,RESULT= 0 tps=00:00/00
    Mon retour de commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    cat monFichier | awk '{ print $4}'
    Job:CNHJCT3
    Job:XXXJCA7
    Job:
    Job:XWXJC16
    Job:
    Job:XWXJC16
    Ma première question comment supprimer le caractère espace juste après l'occurrence "Job: " ?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    cat monFichier | awk '{print $4}' | uniq
    Job:CNHJCT3
    Job:XXXJCA7
    Job:
    Job:XWXJC16
    Job:
    Job:XWXJC16
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    cat monFichier | awk '{print $4}' | sort
    Job:
    Job:
    Job:CNHJCT3
    Job:XWXJC16
    Job:XWXJC16
    Job:XXXJCA7
    Ma seconde question comment supprimer les doublons (Possible d'utiliser la commande uniq sans sort ou indissociable dans ce cas présent) ?

    Merci pour l'aide

  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,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gawk '{sub(": ",":"); ar[$4]++}END{PROCINFO["sorted_in"]="@ind_str_asc"; for(i in ar)print i}' fichier.log
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 840
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par jelmouss Voir le message
    Ma première question comment supprimer le caractère espace juste après l'occurrence "Job: " ?
    cat monFichier |sed -e "s/Job: /Job:/"
    Citation Envoyé par jelmouss Voir le message
    Ma seconde question comment supprimer les doublons ?
    Il faudrait déjà savoir ce que tu entends par "doublon". Et surtout il faudrait aussi savoir si le fichier est déjà trié (tous les doublons sont "à suivre") ou pas car cela influera sur l'algo. Si tous les doublons sont "à suivre" alors une simple lecture suffit (tant que la ligne lue est la même que la précédente on la saute), sinon pour n lignes il faut le lire n² fois (ou alors mémoriser chaque doublon comme l'a fait N_BaH).

    Citation Envoyé par jelmouss Voir le message
    Possible d'utiliser la commande uniq sans sort ou indissociable dans ce cas présent
    La commande "uniq" est indépendante de "sort"... mais ne fonctionne que si les doublons se suivent (ce qui explique que dans 98% des cas elle lui soit liée). Bref tout se résume à 2 questions
    • le fichier est-il déjà trié ?
    • s'il ne l'est pas, est-ce que cela te conviendra si le résultat final l'est ?

    Si tu réponds "oui" à l'une de ces deux questions, tu pourras utiliser "uniq". Sans "sort" pour la première, et avec "sort" pour la seconde.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  4. #4
    Membre confirmé
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Mai 2014
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 75
    Par défaut
    Merci pour vos retour.
    Pour répondre à la question non le fichier n’est pas trié.

    En complétant la commande sed, je devrais partir qur quelques chose comme ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cat monFichier | sed -e "s/Job: /Job:/" | awk '{print $4}' | sort | uniq > SortJob
    NB: A noter que je n’ai pas encore pu tester la commande gawk.

    Merci

  5. #5
    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
    sed sait lire des fichiers, donc cat est inutile.
    awk sait faire des substitutions, et il sait aussi lire des fichiers, donc sed est inutile.
    sort sait rendre unique les doublons, donc uniq est inutile.

    pfiou! il ne reste plus beaucoup de commandes.

    ah! awk sait aussi trier, et ne retenir que des valeurs uniques en cas de doublons, alors sort est inutile.

    ça va aller beaucoup plus vite.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  6. #6
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 360
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 360
    Par défaut
    Une autre solution en awk:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk '$4=="Job:" {$4=$4$5};{XX[$4]++}END{for( i in XX)print i}' fichier

Discussions similaires

  1. Eliminer les espaces dans une chaine de caractere
    Par sialafrere dans le forum WinDev
    Réponses: 2
    Dernier message: 02/05/2008, 21h42
  2. Réponses: 9
    Dernier message: 06/11/2007, 12h36
  3. supprimer les espaces dans une chaine de char
    Par poulette3000 dans le forum Linux
    Réponses: 2
    Dernier message: 17/10/2007, 11h45
  4. Supprimer les espaces dans une chaine de caractères
    Par arnaudperfect dans le forum Shell et commandes GNU
    Réponses: 13
    Dernier message: 23/07/2007, 22h24
  5. [LG]Retirer les blancs dans une chaine
    Par Andy_24DB dans le forum Langage
    Réponses: 16
    Dernier message: 25/02/2004, 16h30

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