Problème script shell

sasuke-kun Messages postés 47 Statut Membre -  
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,

j'ai un petit problème avec mon script shell
je souhaiterai avoir la possibilité de taper une commande qui pourrai me compter le nombre total de mot d'un fichier
j'utilise la commande wc -w mais le problème je n'ai que le nombre total sans la différenciation des mot doublé
Je voudrai avoir en sorti le résultat commun
par exemple
abc ght hjk
dfr abc mno
ght mno
on a un total de 8 mots et quand on fait la différentiation on 5 mots

merci pour l'aide je suis perdu !!!!!!!

7 réponses

  1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Salut,

    Essaie avec ça (c'est un peu tordu, je suis sûr qu'il y a plus simple, mais bon ça marche...) :
    sed 's/ /\n/g' ton_fichier | sort | uniq | wc -w
    Si tu veux des explications, demande ;-))
    Quoi qu'avec le "man" de chaque commande ça devrait être assez clair (à part pour "sed").

    ;-))
    0
    1. sasuke-kun Messages postés 47 Statut Membre
       
      Merci pour ta réponse,
      je viens de vérifier mais il me donne le nombre total de mot de mon fichier.
      Mais moi j'aimerai rassembler les mots en commun en un seul mot et avoir le total

      je te remercie
      0
  2. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Voilà ce que ça donne chez moi avec ton exemple :
    [jp@MDK tmpfs]$ cat fich.txt
    
    abc ght hjk
    dfr abc mno
    ght mno
    
    [jp@MDK tmpfs]$ sed 's/ /\n/g' fich.txt | sort | uniq | wc -w
    
    5
    
    [jp@MDK tmpfs]$
    Affiche-nous un bout de ton fichier, histoire qu'on adapte à ton cas (ici j'ai fait au plus simple en remplaçant les espaces entre les mots par des retours à la ligne (\n)). S'il le faut sur ton fichier il faudra "bidouiller" autrement ... ;-))
    0
  3. sasuke-kun Messages postés 47 Statut Membre
     
    Mon fichier (f1)
    se présente de cette manière

    abc( def) gh@i
    jkl aBc( deF)
    GH@I mno

    j'ai bien compris ce que tu m'a donner mais le problème, j'ai un résultat de 8 au final
    Or il me faudrai un résultat de 5 mots
    Les mots double se transforme en un.

    Si tu veux le but de mon script est de différencié 2 fichiers f1 et f2 et d'avoir au final le résultat du nombre de mot pour l'instant je le fait pour un fichier

    abc( def) gh@i abc( def)
    jkl aBc( deF) GH@I mno
    GH@I mno pqr stu vwx

    à la fin je dois obtenir 5mots pour f1
    7mots pour f2

    au final 2fichiers 8mots distinct
    donc 4 mots dans les 2fichiers

    j'espère que ce n'est pas un peu bouilli

    Merci
    0
  4. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Tu ne m'avais pas dit qu'il fallait différencier les majuscules des miniuscules !!!
    Ca change tout cette histoire ;-\
    sed 's/ /\n/g' ton_fichier | sort | tr '[A-Z]' '[a-z]' | uniq | wc -w
    ;-))
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. sasuke-kun Messages postés 47 Statut Membre
     
    Oui c'est déjà fait mon seul problème, je n'arrive pas a différencié mes mots

    abc( def) gh@i
    jkl aBc( deF)
    GH@I mno

    au final sur mon terminal j'obtiens ceci

    2 abc(
    2 def
    2 gh@i
    1 jkl
    1 mno

    d'où au total 8 mots mais je voudrais avoir:

    1 abc(
    1 def
    1 gh@i
    1 jkl

    d'où 5 mots

    je sais qu'on peut utiliser la commande uniq mais c'est uniquement pour des mots de la même ligne

    Il faut en fait que je trouve une commande qui me permet de simplifier 2mots en un

    Désolé je m'étais mal exprimer, je pense que tu devrais comprendre maintenant mon problème

    Merci
    0
  7. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    J'ai bien compris et c'est ce que j'obtiens chez moi :
    [jp@MDK tmpfs]$ cat f1
    
    abc( def) gh@i
    jkl aBc( deF)
    GH@I mno
    
    [jp@MDK tmpfs]$ sed 's/ /\n/g' f1 | sort | tr '[A-Z]' '[a-z]' | uniq
    
    abc(
    def)
    gh@i
    jkl
    mno
    
    [jp@MDK tmpfs]$
    C'est pas ça que tu veux ???
    0
    1. sasuke-kun Messages postés 47 Statut Membre
       
      It's good
      ça marche c'est super je te remercie c'est trop cool

      Merci beaucoup
      0
  8. sasuke-kun Messages postés 47 Statut Membre
     
    Salut

    Par contre excusez moi j'aurai une question

    je ne comprend pas à quoi correspond le 'n'

    sed 's/ /\n/g'

    Merci
    0
    1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      Re-

      Alors on remplace les espaces entre les mots (blancs) par des retours à la ligne (\n), j'y avais fait allusion au post #3 d'ailleurs.

      Sinon, pour grouper les deux fichiers et gagner une étape tu peux essayer :
      [jp@MDK tmpfs]$ cat f1 f2
      
      abc( def) gh@i
      jkl aBc( deF)
      GH@I mno
      abc( def) gh@i abc( def)
      jkl aBc( deF) GH@I mno
      GH@I mno pqr stu vwx
      
      [jp@MDK tmpfs]$ cat f1 f2 | sed 's/ /\n/g'| sort | tr '[A-Z]' '[a-z]' | uniq | wc -w
      
      8
      
      [jp@MDK tmpfs]$
      ;-))
      0