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 :

Commande IF Bash


Sujet :

Shell et commandes GNU

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2017
    Messages : 8
    Points : 6
    Points
    6
    Par défaut Commande IF Bash
    Bonsoir à tous


    j'ai rencontré un problème en utilisant la commande if.. j'ai plusieurs fichiers contenant 3 colonnes {nombre d'occurrence, forme du mot, lemme du mot} par ex

          2 sujets	sujet
          2 Terre	<unknown>
          2 thèse	thèse
    je veux faire pour chaque fichier un autre qui contient le nombre d'occurence et les lemme des mots, mais pour les formes des mots qui ont comme lemme <unknown> je veux qu'il affiche dans ce cas la le forme et non le lemme par exemple

          2 sujet   (lemme)
          2 Terre   (forme)
          2 thèse   (lemme)
    donc j'ai fait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    file=txt
    while  read -r f1 f2 f3 ; do
    if [[ "$f3" = "<uknown>" ]];
    then echo $f2  $f1
    else echo $f3  $f1
    fi
    done < $file

    Mais cela ne marche pas

  2. #2
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    Bonjour

    Pour la modification de fichier texte, utilise grep/sed/awk plutôt.

    Pour faire ce que tu veux faire, awk est bien:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ cat test.txt 
            2 sujets        sujet
            2 Terre <unknown>
            2 thèse thèse
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ awk -F'\t' '{OFS=FS;} ($3=="<unknown>"){$3="(forme)";} 1' test.txt
            2 sujets        sujet
            2 Terre (forme)
            2 thèse thèse
    Pardon. Mieux:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ awk -F'\t' '{OFS=FS;} ($3!="<unknown>"){print $1,$2,$4,"(lemme)";} ($3=="<unknown>"){print $1,$2,$4,"(forme)";}' test.txt                                                                                                                 
            2 sujets                (lemme)
            2 Terre         (forme)
            2 thèse         (lemme)
    PS: Ton code écrit "uknown" et pas "unknown".
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2017
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Je crois que j'ai juste écrit uknown et non uNknown merci

  4. #4
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    Problème de copier coller de ton fichier avec tabulation.
    Je donne la bonne version awk:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ awk -F'\t' 'BEGIN{OFS="\t";} ($4!="<unknown>"){print $1,$2,$4,"(lemme)";} ($4=="<unknown>"){print $1,$2,$3,"(forme)";}' test.txt                                                                                                          
            2       sujet   (lemme)
            2       Terre   (forme)
            2       thèse   (lemme)
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  5. #5
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 278
    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 278
    Points : 12 726
    Points
    12 726
    Par défaut
    Bonjour et Bonne Année à tous,

    une autre solution awk pour le fun:
    Si on considère toujours la colonne 4
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk -F'\t' 'BEGIN{OFS=FS} $4=$4 == "<unknown>" ? "(forme)" : "(lemme)"' test.txt
    Si on doit considérer la colonne 3 ou 4 selon le contenu de la colonne 4:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk -F'\t' 'BEGIN{OFS=FS} ($3=$4 == "<unknown>" ? $3"\t(forme)" : $4"\t(lemme)") && NF=3' test.txt
    Cordialement.

  6. #6
    Expert confirmé
    Avatar de becket
    Profil pro
    Informaticien multitâches
    Inscrit en
    Février 2005
    Messages
    2 854
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien multitâches
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 2 854
    Points : 5 915
    Points
    5 915
    Par défaut
    Le code proposé et l'explication ne font penser qu'il s'agit de quelque chose d'un peu plus simple.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    > cat lemme.txt
    2 sujets sujet
    2 Terre <unknown>
    2 thèse thèse
     
    > awk '$3 ~/<unknown>/ {$3=$2}  {print $0}' lemme.txt
    2 sujets sujet
    2 Terre Terre
    2 thèse thèse

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 550
    Points : 19 383
    Points
    19 383
    Par défaut
    [quote=becket]c'est pas dit :
    Citation Envoyé par DreamAT
    pour chaque fichier [faire] un autre qui contient le nombre d'occurence et les lemme des mots
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

Discussions similaires

  1. Cherche une commande shell/bash pour traitement sur fichier
    Par breizho35 dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 26/02/2015, 11h18
  2. Probleme Substitution - Commande Sd (bash)
    Par pachalcs dans le forum Linux
    Réponses: 2
    Dernier message: 14/04/2012, 00h17
  3. commande shell bash
    Par achrafkaran dans le forum Shell et commandes GNU
    Réponses: 8
    Dernier message: 17/12/2011, 12h30
  4. Utiliser une commande de Bash 4.0 sous Bash 3.0
    Par Yokav dans le forum Shell et commandes GNU
    Réponses: 10
    Dernier message: 20/05/2011, 09h29
  5. commande sed (bash)
    Par bossy451 dans le forum Linux
    Réponses: 1
    Dernier message: 28/03/2010, 18h41

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