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

Linux Discussion :

trier 2 listes de noms


Sujet :

Linux

  1. #1
    Candidat au Club
    Inscrit en
    Janvier 2009
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 12
    Points : 4
    Points
    4
    Par défaut trier 2 listes de noms
    Bonjour,

    J'ai un problème de tri sur un fichier, un tableur excell (que j'ouvre avec OpenOffice)

    En effet, il se trouve dans ce fichier 2 colonnes contenant chacune un certain nombre de nom

    Certaines nomss sont présents dans les 2 colonnes, d'autres sont uniquement présents dans l'une ou l'autre colonne.

    Il me faut trier ces 2 colonnes.

    Le premier résultat doit être les noms communs aux 2 colonnes.
    Le second doit être les noms uniquement présents dans la 1ère colonne.
    Le dernier doit être les noms uniquement présents dans la 2ème colonne.

    Aussi, je sélectionne toute la colonne pour mettre tout au même format par défaut, puis met tout les noms en majuscule.

    Puis, je copie la 1ère colonne du fichier excell et la colle dans 1 fichier KWrite (nommé H) Puis fait la même chose avec la 2ème colonne dans un 2ème fichier KWrite (nommé C). KWrite est un utilitaire genre notepad sous le bureau Linux KDE.

    J'utilise alors la commande sort pour trier les noms par ordre alphabétique pour le fichier H, puis C

    ex : sort -o H1 H
    mv H1 H

    Puis la commande uniq :

    ex : uniq H > H1
    mv H1 H

    Puis utilise des scripts (que je ne comprends pas bien) pour faire les différents tris.

    -Noms communs aux 2 colonnes :

    script appelé fusion :
    -----------------------------------

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    #! /bin/bash -x
     
    fic_serveur1="/home/kaleo/Bureau/TEST/H"
    fic_serveur2="/home/kaleo/Bureau/TEST/C"
    fictmp=/tmp/fichier
    commun1="/home/kaleo/Bureau/TEST/commun"
     
    #for m in `cat $fic_serveur1`
     
    # do
    # grep $m $fic_serveur2 >> $commun1
     
    # done
     
     
    awk '{ printf("^%s$\n", $1) }' $fic_serveur1 > $fictmp
     
    {
    grep -f $fictmp $fic_serveur2 > $commun1
    # noms communs aux 2 colonnes écritent dans le fichier commun
    } 2>commun.log
     
    rm $fictmp
    ---------------------------

    - Noms uniquement présents dans la colonne H du fichier excell, c'est à dire dans le fichier H

    script appelé machine_unique_H

    -------------------------

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #! /bin/bash -x
     
    fic_serveur1="/home/kaleo/Bureau/TEST/H"
    fic_serveur2="/home/kaleo/Bureau/TEST/C"
    fictmp=/tmp/fichier
    commun1="/home/kaleo/Bureau/TEST/unique_H"
     
    awk '{ printf("^%s$\n", $1) }' $fic_serveur2 > $fictmp
     
    {
    grep -v -f $fictmp $fic_serveur1 > $commun1
    } 2>commun.log
     
    rm $fictmp
    ---------------------------

    - Noms uniquement présents dans la colonne C du fichier excell, c'est à dire dans le fichier C

    script appelé machine_unique_C
    -------------------------

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    #! /bin/bash -x
     
    fic_serveur1="/home/kaleo/Bureau/TEST/C"
    fic_serveur2="/home/kaleo/Bureau/TEST/H"
    fictmp=/tmp/fichier
    commun1="/home/kaleo/Bureau/TEST/unique_C"
     
    awk '{ printf("^%s$\n", $1) }' $fic_serveur2 > $fictmp # prend que la chaine (%s=string) #comprise entre début de ligne (^) et la fin de ligne
    # ($), le \n est égale à retour chariot, la chaine est entre "", le $1 = au 1er argument, printf #affiche la chaine entre ()
    # les {} = l'ensemble des commandes awk comprises entre ''
     
    {
    grep -v -f $fictmp $fic_serveur1 > $commun1
    } 2>commun.log
     
    rm $fictmp
    -----------------

    Hélas la commande wc -l appliquée aux différents fichiers : H, C, commun, unique_C, unique_H ne renvoit pas un résultat cohérent.

    ex : wc -l H

    La somme de commun(185)+unique_H(80) est différente des 266 noms présents dans H.

    266 H
    285 C
    80 unique_H
    99 unique_C
    185 commun

    De même il manque 1 nom dans la somme commun+unique_C.

    Après recherche manuelle je trouve un nom présent dans le fichier H et absent dans le fichier unique_H

    De même je trouve un nom présent dans le fichier C (ZORRO) et absent dans le fichier unique_C

    La commande diff qui compare le fichier C au fichier H :

    diff C H > DIFFERENCE

    montre à travers la lecture du fichier DIFFERENCE que le nom ZORRO n'apparait pas comme nom unique dans le fichier C
    La réecriture du nom (ZORRO) sous VI dans le fichier C ne change hélas rien

    Est ce une erreur de manipulation de ma part ?

    Le script appelé fusion semble bon, par contre je doute des scripts :

    machine_unique_C
    machine_unique_H

    Merci d'avance pour votre patience (et bonne année ;0)

  2. #2
    Candidat au Club
    Inscrit en
    Janvier 2009
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 12
    Points : 4
    Points
    4
    Par défaut
    Peut être qu'il est préférable de me proposer un (ou des) scripts dont on est sur de sa bonne marche et que je le(s) test(s) sur ces 2 colonnes à trier ?

    L'idéal serait un (ou des) script(s) (en bash si possible) simple(s) à comprendre pour moi .

    J'ai tenté ceci mais je n'arrive pas à le faire fonctionner :

    ----------------------------

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    #! /bin/bash -x
     
    fic_serveur1="/home/kaleo/Bureau/TEST/H"
    fic_serveur2="/home/kaleo/Bureau/TEST/C"
    #fictmp=/tmp/fichier
    commun1="/home/kaleo/Bureau/TEST/unique_H"
     
    cat $fic_serveur2 | while read NomMachine
     
    do 
    	RETVAL=0
    	test=`echo $NomMachine`
     
    #awk '{ printf("^%s$\n", $1) }' $fic_serveur2 > $fictmp
     
    #{ 
    	grep $test $fic_serveur1 && RETVAL=1
    	echo $RETVAL
    	if [ $RETVAL -ne 1 ] ; then
    		grep $test $fic_serveur1 | awk '{ printf $1 }' >> $commun1
    	fi
    done < $fic_serveur2
    #} 2>commun.log 
     
    #rm $fictmp
    ----------------------------------

    Cela me renvoit les résultats suivants :

    + read NomMachine
    + RETVAL=0
    ++ echo ALBERT1
    + test=ALBERT1
    + grep ALBERT1 /home/kaleo/Bureau/TEST/H
    + echo 0
    0
    + '[' 0 -ne 1 ']'
    + grep ALBERT1 /home/kaleo/Bureau/TEST/H
    + awk '{ printf $1 }'
    + read NomMachine

    -------------------------------

    Je précise que certains noms se terminent par des chiffres (comme 1, 13, 113), d'autres n'ont pas de chiffres. Certains noms se répètent, mais la différence se manifeste au niveau des chiffres qui terminent ces noms (ANDRE1, ANDRE14 etc...)

  3. #3
    ALT
    ALT est déconnecté
    Membre émérite
    Avatar de ALT
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2002
    Messages
    1 265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 265
    Points : 2 446
    Points
    2 446
    Par défaut
    Je ne comprends pas bien : tu utilises OpenOffice (éditeur : Sun Microsystems) ou Excel (éditeur : Microsoft) ?
    Les nombres à la suite des noms doivent-t-ils être pris en compte pour la comparaison ou ignorés ?
    Plutôt que de passer par KWrite, n'y a-t-il pas moyen de faire une macrocommande de SCalc (ou ooCalc, suivant les versions), sachant que le tri peut être réalisé par le tableur ?
    Bref, tout ceci me paraît un poil tortueux.

  4. #4
    Candidat au Club
    Inscrit en
    Janvier 2009
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 12
    Points : 4
    Points
    4
    Par défaut
    J'utilise un fichier crée sous excel que j'ouvre avec calc d'OpenOffice.

    Les nombres à la suite des noms doivent être pris en compte pour la comparaison

    ex : ANDRE1 et ANDRE12 sont 2 noms différents.

    Il me semble que le tri peut être réalisé par un tableur.

    Mais je n'arrive pas à réaliser ce tri par script et cela me bloque...

    Je n'arrive pas à comprendre ce qui ne marche pas

  5. #5
    ALT
    ALT est déconnecté
    Membre émérite
    Avatar de ALT
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2002
    Messages
    1 265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 265
    Points : 2 446
    Points
    2 446
    Par défaut
    Tu fais quoi pour trier ton fichier avec l'invite de commande ?
    Autrement dit, à quoi ressemble ton script actuel ?

  6. #6
    Candidat au Club
    Inscrit en
    Janvier 2009
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 12
    Points : 4
    Points
    4
    Par défaut
    Ceux sont ceux du premier message.

    J'ai essayé dans faire un différent pour voir si c'est un problème de rédaction dans les scripts de mon premier message.

    On voit cet essai dans mon second message, mais il ne marche pas.

    Peut être le mieux est de me poster un script dont on est sur de sa bonne marche. Pour voir le résultat.

    J'en viens à douter de tout ; est ce une mauvaise manipulation de ma part, ou un problème de script ?

  7. #7
    ALT
    ALT est déconnecté
    Membre émérite
    Avatar de ALT
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2002
    Messages
    1 265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 265
    Points : 2 446
    Points
    2 446
    Par défaut
    Voici ce que j'ai fait en quelques minutes, partant du principe que les doublons sont éliminés :
    Mon premier fichier de données :
    Nom : texte1.texte
    léon
    jules
    marcel
    louis
    pierre
    thomas
    andré
    Mon deuxième fichier :
    Nom : texte2.texte
    léon
    marcel
    jean
    jacques
    louis
    Le script pour trouver les noms en commun (tu étais très près de la solution, mais à vouloir compliquer...) :
    Nom : commun.sh
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #!/bin/bash                                                                                      
     
    #** extraction des lignes communes entre deux fichiers **
     
    for m in `cat ./texte1.texte`
    do                           
    grep $m texte2.texte >> commun.texte
    done
    Et il me retourne le fichier :
    Nom : commun.texte
    léon
    marcel
    louis
    Pour les noms de texte1.texte absents de texte2.texte, c'est un poil plus compliqué. Voici ce que j'ai trouvé (il y a peut-être mieux, mais bon) :
    Nom : texte1seul.sh
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #!/bin/bash  
     
    #** extraction des lignes dans texte1.texte absentes de texte2.texte **
     
    for m in `cat ./texte1.texte`
    do                           
      if [ "`grep $m texte2.texte`" = "" ]
      then echo $m >> texte1seul.texte    
      fi                                  
    done
    Et voici le résultat :
    Nom : texte1seul.texte
    jules
    pierre
    thomas
    andré
    Bref, rien de bien complexe !
    Et tu n'as même pas besoin de trier les noms avant traitement, s'il n'y a pas de doublons.

    Voilà.

  8. #8
    Candidat au Club
    Inscrit en
    Janvier 2009
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 12
    Points : 4
    Points
    4
    Par défaut
    Effectivement cela marche pour de petites listes de mots

    Mais dès le moment ou la liste de mots devient grande alors les résultats ne concorde plus.

    Ainsi, j'ouvre le clone de notepad sous KDE, KWrite, je vais dans Edition->Tout selectionner, Puis Edition->copier du fichier où se trouve une grande liste de mots.
    Puis j'ouvre avec vi le fichier texte1.texte (vi texte1.texte), appui sur la touche i, puis Edition->coller dans la console.
    Tous les mots sont alors collés dans texte1.texte, les uns en dessous des autres.

    -------------------------------

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    ALPHA
    EXODUS
    LGQEV13
    LGQEV14
    LGQEV7
    LGQEV8
    LGSXT1
    LGSXT2
    LGSXT3
    LGSXT4
    LGSXT5
    LGSXT6
    LGSXT7
    LGSXT8
    LIABV1
    LIABV10
    LIABV11
    LIABV13
    LIABV14
    LIABV3
    LIABV6
    LIABV7
    LIABV8
    LIABV9
    LIANE10
    LIANE2
    LIANE3
    LIANE9
    LIEQP1
    LIISY2
    LIISY3
    LIISY4
    LINNT12
    LINNT13
    LINNT4
    LINNT5
    LINNT7
    LINNT8
    LINNT9
    LIRGS1
    LIRGS10
    LIRGS11
    LIRGS12
    LIRGS14
    LIRGS16
    LIRGS19
    LIRGS34
    LIRGS7
    LIRGS71
    LIRGS73
    LIRGS9
    LITUF15
    LITUF16
    LITUF17
    LITUF18
    LITUF19
    LITUF20
    LITUF22
    LITUF47
    LITUF48
    LITUF49
    LITUF53
    LITUF55
    LITUF58
    LITUF69
    LITUF9
    LPABV1
    LPABV2
    LPABV3
    LPARA1
    LPAVN1
    LPBOD1
    LPBOD2
    LPCFE1
    LPGNV1
    LPGTY1
    LPGTY2
    LPGTY4
    LPHLP12
    LPHLP13
    LPLIL1
    LPLYS1
    LPLYS2
    LPMLU1
    LPMSY1
    LPNNT10
    LPNNT11
    LPNNT12
    LPNNT13
    LPNNT17
    LPNNT18
    LPNNT19
    LPNNT20
    LPNNT21
    LPNNT22
    LPNNT23
    LPNNT24
    LPNNT25
    LPNNT26
    LPNNT27
    LPNNT29
    LPPIM1
    LPQEV10
    LPQEV11
    LPQEV14
    LPQEV15
    LPQEV2
    LPQEV3
    LPQFC1
    LPRNS1
    LPRNS2
    LPSXB1
    LPTLS5
    LPURO1
    LPXBD1
    LPXCK1
    LPXCK2
    LPXCK3
    LPXMR1
    LPXRX1
    LYABV1
    LYABV18
    LYABV2
    LYABV20
    LYABV21
    LYABV23
    LYABV24
    LYABV25
    LYABV29
    LYABV3
    LYABV30
    LYABV32
    LYABV33
    LYABV34
    LYABV35
    LYABV38
    LYABV39
    LYABV4
    LYABV40
    LYABV41
    LYABV42
    LYABV43
    LYABV44
    LYABV45
    LYABV46
    LYABV5
    LYAJA2
    LYANE11
    LYANE12
    LYANE2
    LYANE3
    LYANY1
    LYANY2
    LYANY3
    LYANY7
    LYANY8
    LYANY9
    LYARA2
    LYARI1
    LYARI2
    LYARI4
    LYARI5
    LYARI7
    LYAVN2
    LYBES2
    LYBIA2
    LYBOD2
    LYBOU2
    LYBVA2
    LYBVE1
    LYCAY2
    LYCCE1
    LYCCF2
    LYCDG2
    LYCEQ1
    LYCFE2
    LYCFR2
    LYCGY2
    LYCMF1
    LYCMZ1
    LYDIJ2
    LYEBU1
    LYENC1
    LYEQP1
    LYEQP11
    LYEQP4
    LYFDF2
    LYFNI1
    LYGNB3
    LYGTY2
    LYISY113
    LYISY19
    LYISY2
    LYISY21
    LYISY22
    LYISY23
    LYISY26
    LYISY29
    LYISY30
    LYISY31
    LYISY32
    LYISY38
    LYISY47
    LYISY49
    LYISY73
    LYISY81
    LYISY82
    LYISY83
    LYISY89
    LYISY90
    LYISY99
    LYIVN1
    LYLBI2
    LYLIG2
    LYLIL2
    LYLME2
    LYLST2
    LYLYS3
    LYLYS5
    LYLYS6
    LYMAY1
    LYMLH2
    LYMPL2
    LYMRS2
    LYMRS3
    LYMZM2
    LYNCE2
    LYNNT10
    LYNNT11
    LYNNT12
    LYNNT13
    LYNNT14
    LYNNT15
    LYNNT3
    LYNTE3
    LYONX2
    LYORS2
    LYPAR2
    LYPGF1
    LYPIS13
    LYPIS14
    LYPIS3
    LYPIS4
    LYPSE2
    LYPTP2
    LYPUF1
    LYQFC1
    LYRFC5
    LYRFC6
    LYRGS1
    LYRHE2
    LYRNS2
    LYRUN2
    LYSXB2
    LYTLN2
    LYTLS2
    LYTLS3
    LYTRO2
    LYTUF3
    LYURO2
    LYVAF1
    LYXVE2
    RP888888
    SURMUS240
    SURMUS70
    SURRGS01
    ZIABV3
    ----------------------------------------

    Je fais la même chose avec une autre longue liste de mots que je colle dans texte2.texte

    ------------------------------------
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
     
    BITUF1
    DITUF19
    DITUF8
    DOUBLON
    FERMÉ
    LGQEV13
    LGQEV14
    LGQEV7
    LGQEV8
    LGSXT1
    LGSXT2
    LGSXT3
    LGSXT4
    LGSXT5
    LGSXT8
    LIABV1
    LIABV10
    LIABV11
    LIABV13
    LIABV14
    LIABV3
    LIABV6
    LIABV9
    LIEQP1
    LIISY2
    LIISY3
    LIISY4
    LINNT3
    LINNT5
    LINNT7
    LINNT8
    LINNT9
    LIRGS26
    LITUF15
    LITUF16
    LITUF17
    LITUF18
    LITUF19
    LITUF20
    LITUF22
    LITUF39
    LITUF42
    LITUF47
    LITUF48
    LITUF49
    LITUF53
    LITUF55
    LITUF58
    LITUF69
    LITUF9
    LPABV1
    LPABV2
    LPABV3
    LPARA1
    LPAVN1
    LPBOD1
    LPBOD2
    LPCFE1
    LPGNV1
    LPGTY1
    LPGTY2
    LPGTY4
    LPLIL1
    LPLYS1
    LPLYS2
    LPMLU1
    LPNNT10
    LPNNT11
    LPNNT12
    LPNNT13
    LPNNT17
    LPNNT18
    LPNNT20
    LPNNT21
    LPNNT22
    LPNNT23
    LPNNT24
    LPNNT25
    LPNNT26
    LPNNT27
    LPNNT4
    LPNNT5
    LPPIM1
    LPQEV1
    LPQEV10
    LPQEV11
    LPQEV14
    LPQEV15
    LPQEV2
    LPQEV3
    LPQFC1
    LPRNS1
    LPRNS2
    LPSXB1
    LPTLS1
    LPURO1
    LPXBD1
    LPXMR1
    LPXRX1
    LYABV1
    LYABV18
    LYABV2
    LYABV20
    LYABV21
    LYABV23
    LYABV24
    LYABV25
    LYABV29
    LYABV3
    LYABV30
    LYABV32
    LYABV33
    LYABV34
    LYABV35
    LYABV38
    LYABV4
    LYABV40
    LYABV41
    LYABV42
    LYABV43
    LYABV45
    LYABV46
    LYABV5
    LYAJA1
    LYAJA2
    LYANE11
    LYANE2
    LYANE3
    LYANE5
    LYANE7
    LYANE8
    LYARA1
    LYARI1
    LYARI2
    LYARI4
    LYARI5
    LYARI6
    LYARI7
    LYAVN1
    LYBES2
    LYBIA1
    LYBIA2
    LYBOD1
    LYBOU1
    LYBVA2
    LYBVE1
    LYCAY1
    LYCCF1
    LYCDG1
    LYCFE1
    LYCFR1
    LYCFR2
    LYCGY2
    LYDIJ1
    LYDIJ2
    LYEBU1
    LYEQP1
    LYEQP11
    LYEQP2
    LYEQP4
    LYEVAF
    LYFNI2
    LYGNB1
    LYGNB3
    LYGTY2
    LYISY113
    LYISY17
    LYISY19
    LYISY2
    LYISY21
    LYISY22
    LYISY23
    LYISY26
    LYISY29
    LYISY30
    LYISY31
    LYISY32
    LYISY37
    LYISY38
    LYISY47
    LYISY49
    LYISY73
    LYISY81
    LYISY82
    LYISY83
    LYISY89
    LYISY90
    LYISY99
    LYIVN1
    LYLBI1
    LYLBI2
    LYLIG1
    LYLIL1
    LYLME2
    LYLST1
    LYLYS1
    LYLYS3
    LYLYS4
    LYMAY1
    LYMLH1
    LYMLH2
    LYMPL2
    LYMRS1
    LYMRS2
    LYMRS3
    LYMZM1
    LYMZM2
    LYNCE1
    LYNCE2
    LYNNT11
    LYNNT12
    LYNNT22
    LYNNT23
    LYNNT3
    LYNTE1
    LYNTE2
    LYONX2
    LYORS1
    LYORY1
    LYPAR1
    LYPAR2
    LYPGF1
    LYPIS1
    LYPIS10
    LYPIS13
    LYPIS14
    LYPIS3
    LYPIS4
    LYPIS5
    LYPIS6
    LYPIS7
    LYPIS8
    LYPIS9
    LYPSE1
    LYPTP1
    LYPUF1
    LYQFC1
    LYRFC5
    LYRFC6
    LYRGS1
    LYRHE1
    LYRHE2
    LYRNS1
    LYRNS2
    LYRUN2
    LYSXB1
    LYSXB2
    LYTLN1
    LYTLS1
    LYTRO1
    LYTUF1
    LYTUF3
    LYURO1
    LYXVE1
    LYXVE2
    NITUF3
    NITUF5
    NITUF6
    SITUF10
    SITUF9
    UIABV47
    W2K-GNB
    W2K-IVN
    W2K-RUN
    W2K-TUF
    WINNT2
    WYIFN3
    WYIFS2
    WYIFS3
    WYIFS4
    XITUF14
    XITUF25
    XPQEV3
    XYARI4
    XYARI5
    XYARI6
    XYAVN1
    XYBOU1
    XYCDG1
    XYIFN1
    XYIFS1
    XYLIL4
    XYNTE4
    XYTUF1
    XYXVE1
    ZIABV3
    ------------------------------------

    Puis je lance les scripts commun.sh et texte1seul.sh qui marchent pour une petite liste de mots.

    Enfin, je lance la commande wc -l pour compter :

    ----------------------

    [kaleo@localhost ALT]$ wc -l texte1.texte
    267 texte1.texte
    [kaleo@localhost ALT]$ wc -l texte2.texte
    286 texte2.texte
    [kaleo@localhost ALT]$ wc -l commun.texte
    215 commun.texte
    [kaleo@localhost ALT]$ wc -l texte1seul.texte
    81 texte1seul.texte

    ---------------------

    Hélas la somme de "texte1seul.texte" et de "commun.texte" est différente du total de "texte1.texte" :

    81+215=296
    texte1.texte=267

    Et je ne comprends pas pourquoi

  9. #9
    Candidat au Club
    Inscrit en
    Janvier 2009
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 12
    Points : 4
    Points
    4
    Par défaut
    Lorsque je copie la première liste de mots dans mon précédent message puis ouvre avec vi texte1.texte et colle la liste par un clic central, que je copie/colle la deuxième liste de la même manière dans texte2.texte, et lance à nouveau les 2 scripts j'obtiens le même résultat.

    Je remarque avant de lancer les scripts que le premier mot de la liste texte2.texte est amputé de ses premières lettres.
    Aussi je corrige en utilisant le programme vi puis la touche i pour ajouter les lettres manquantes à ce premier mot

    Merci d'avance

  10. #10
    ALT
    ALT est déconnecté
    Membre émérite
    Avatar de ALT
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2002
    Messages
    1 265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 265
    Points : 2 446
    Points
    2 446
    Par défaut
    En fait, il y a des doublons dans commun.texte.
    Il faut donc ajuster commun.sh pour les éliminer.
    En utilisant la même structure de code que pour texte1seul.sh ?

  11. #11
    Candidat au Club
    Inscrit en
    Janvier 2009
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 12
    Points : 4
    Points
    4
    Par défaut
    "En utilisant la même structure de code que pour texte1seul.sh ?"

    Hélas je n'y arrive pas.

    j'ai tenté ceci en vain :

    ----------------------------------

    #! /bin/bash

    #** extraction des lignes communes entre deux fichiers **

    for m in `cat /home/kaleo/Bureau/TEST/ALT/H`
    do
    grep $m /home/kaleo/Bureau/TEST/ALT/C >> commun.texte
    done
    sort commun.texte | uniq > commun.texte

    -----------------------------------------

    commun.texte reste vide.

    Pourtant quand j'applique cette commande en dehors du script cela marche

    [root@localhost ALT]# sort communDouble.texte | uniq > communSimple.texte

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 34
    Points : 41
    Points
    41
    Par défaut
    Il existe certains outils pour comparer deux fichiers. En l'occurrence le commande comm devrait correspondre à ce que tu veux.

    Extrait du manuel :
    comm affiche les lignes communes, et les lignes uniques de deux fichiers d'entrée. Les deux fichiers doivent être triés au préalable. Le nom de fichier `-' correspond à l'entrée standard.

    Sans option, comm produit trois colonnes en sortie. La première colonne contient les lignes présentes uniquement dans fichier_1, la seconde colonne contient les lignes présentes uniquement dans fichier_2, et la troisième contient les lignes communes aux deux fichiers.
    OPTIONS

    Les options -1, -2, et -3 suppriment l'affichage des colonnes correspondantes.
    Les options peuvent se combiner.
    Donc pour obtenir les lignes présentes uniquement dans texte1.txt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    comm -3 -2 texte1.txt texte2.txt > texte1seul.txt
    Pour obtenir les lignes communes aux deux (les options peuvent se fusionner) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    comm -12 texte1.txt texte2.txt > commun.txt

  13. #13
    Candidat au Club
    Inscrit en
    Janvier 2009
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 12
    Points : 4
    Points
    4
    Par défaut
    Effectivement la commande comm marche

    Super grand maousse big merci à tous pour votre aide

    Toutefois, j'aimerais bien comprendre pourquoi mon dernier script ne marche pas :

    --------------------------

    #! /bin/bash

    #** extraction des lignes communes entre deux fichiers **

    for m in `cat /home/kaleo/Bureau/TEST/ALT/H`
    do
    grep $m /home/kaleo/Bureau/TEST/ALT/C >> commun.texte
    done
    sort commun.texte | uniq > commun.texte

    -----------------------------

  14. #14
    ALT
    ALT est déconnecté
    Membre émérite
    Avatar de ALT
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2002
    Messages
    1 265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 265
    Points : 2 446
    Points
    2 446
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sort commun.texte | uniq > commun.texte
    Ne manquerait-il pas un '>' ?
    Ce qui suppose de vider préalablement le fichier, ce qui impose d'en utiliser un autre.

  15. #15
    Candidat au Club
    Inscrit en
    Janvier 2009
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 12
    Points : 4
    Points
    4
    Par défaut
    Effectivement le >> fait fonctionner correctement le script, qui remplit alors le fichier commun.texte.

    Mais des doublons apparaissent alors dans commun.texte

    exemple :

    LIABV10
    LIABV11
    LIABV13
    LIABV14
    LIABV10
    LIABV11
    LIABV13
    LIABV14

    Il semble que cela soit un problème de retour chariot ou/et de caractère invisible qui crée ce type de doublon.

    Est il possible de montrer un script fonctionnel (pas trop difficile à comprendre si possible) pour ce type de tri ?

    En effet, je n'arrive pas à reprendre la même structure de code que pour texte1seul.sh pour en faire un script correct

    Merci d'avance

  16. #16
    ALT
    ALT est déconnecté
    Membre émérite
    Avatar de ALT
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2002
    Messages
    1 265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 265
    Points : 2 446
    Points
    2 446
    Par défaut
    Un truc de ce style a l'air pas mal :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #!/bin/bash
     
    #** extraction des lignes dans texte1.texte présentes aussi dans texte2.texte **
     
    for m in `cat ./texte1.texte`
    do
      if [ "`grep $m texte2.texte`" != "" ]
      then echo $m >> commun.texte
      fi
    done
    Et je ne vois pas pourquoi tu n'y es pas arrivé sans moi : c'est presque le même que texte1seul.sh

  17. #17
    Candidat au Club
    Inscrit en
    Novembre 2008
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 13
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par kaleo Voir le message
    Effectivement le >> fait fonctionner correctement le script, qui remplit alors le fichier commun.texte.

    Mais des doublons apparaissent alors dans commun.texte
    Si tu mets un seul > , bash va écraser le fichier avant que "sort" ne le lise, du coup : résultat vide.
    avec deux >>, la sortie sera ajoutée au fichier, mais toutes les lignes, mais toutes les lignes présentent à l'origine resteront, donc plein de doublons.

    La solution est simplement de rediriger vers un autre fichier...

  18. #18
    ALT
    ALT est déconnecté
    Membre émérite
    Avatar de ALT
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2002
    Messages
    1 265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 265
    Points : 2 446
    Points
    2 446
    Par défaut
    Ou de vider le fichier précédent.

Discussions similaires

  1. Trier une List contenant des noms et prénoms
    Par Jb_One73 dans le forum Général Java
    Réponses: 15
    Dernier message: 19/02/2015, 15h19
  2. Réponses: 3
    Dernier message: 27/01/2009, 18h17
  3. récupérer la liste des noms des champs d'une table
    Par la_didise dans le forum Access
    Réponses: 2
    Dernier message: 29/05/2006, 16h55
  4. Trier un list control
    Par Delian dans le forum MFC
    Réponses: 2
    Dernier message: 06/10/2004, 17h44
  5. [Debutant(e)]Trier une liste
    Par LeDébutantJava dans le forum Collection et Stream
    Réponses: 8
    Dernier message: 19/08/2004, 12h44

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