Comparer 2 champs sur lignes differentes
Résolu/Fermé
papavers
Messages postés
24
Date d'inscription
mardi 6 mai 2008
Statut
Membre
Dernière intervention
10 mai 2012
-
15 juil. 2009 à 20:43
papavers Messages postés 24 Date d'inscription mardi 6 mai 2008 Statut Membre Dernière intervention 10 mai 2012 - 17 juil. 2009 à 14:14
papavers Messages postés 24 Date d'inscription mardi 6 mai 2008 Statut Membre Dernière intervention 10 mai 2012 - 17 juil. 2009 à 14:14
A voir également:
- Comparer 2 champs sur lignes differentes
- 2 comptes whatsapp - Guide
- Comment aller à la ligne sur excel - Guide
- 2 ecran pc - Guide
- Comparer prix amazon - Guide
- Word numéro de page 1/2 - Guide
13 réponses
mamiemando
Messages postés
33079
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
23 avril 2024
7 749
16 juil. 2009 à 01:08
16 juil. 2009 à 01:08
Avec uniq et cut tu peux extraire les clés (première colonne).
Avec un grep tu peux extraire les lignes pour une clé donnée (que je note x dans ce qui suit) à chaque clé ainsi extraite. En appliquant au grep un sort en ne conservant que la dernière ligne avec un tail on obtient le résultat désiré.
Version sous forme d'un script (sans doute plus lisible) :
Pour plus de détails :
Bonne chance
(mando@aldur) (~) $ cat pouet 205321505 5 21/06/2009 205321505 7 25/05/2009 202003245 2 12/05/2009 205432152 5 14/07/2009 206434434 5 12/07/2009 206434434 5 18/07/2009 (mando@aldur) (~) $ cat pouet | cut -f1 -d' ' | uniq 205321505 202003245 205432152 206434434
Avec un grep tu peux extraire les lignes pour une clé donnée (que je note x dans ce qui suit) à chaque clé ainsi extraite. En appliquant au grep un sort en ne conservant que la dernière ligne avec un tail on obtient le résultat désiré.
(mando@aldur) (~) $ for x in `cat pouet | cut -f1 -d' ' | uniq`; do grep $x pouet | sort | tail -n 1; done 205321505 7 25/05/2009 202003245 2 12/05/2009 205432152 5 14/07/2009 206434434 5 18/07/2009
Version sous forme d'un script (sans doute plus lisible) :
#!/bin/bash for x in `cat pouet | cut -f1 -d' ' | uniq`; do grep $x pouet | sort | tail -n 1; done
Pour plus de détails :
man cut man uniq man sort man tai man grep
Bonne chance
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 895
16 juil. 2009 à 10:04
16 juil. 2009 à 10:04
Salut,
A essayer :
Édit : Y'a du rififi dans la mise en page comme qui dirait ;-(((
Les sauts de lignes n'existent pas en réalité ;-(
A essayer :
[tmpfs]$ cat plop;-))
205321505 5 21/06/2009
205321505 7 25/05/2009
202003245 2 12/05/2009
205432152 5 14/07/2009
206434434 5 12/07/2009
206434434 5 18/07/2009
[tmpfs]$ sort -r +0 -1 -k 3.4,3.6 -k 3.1,3.3 plop | sort -ru +0 -1
206434434 5 18/07/2009
205432152 5 14/07/2009
205321505 5 21/06/2009
202003245 2 12/05/2009
[tmpfs]$
Édit : Y'a du rififi dans la mise en page comme qui dirait ;-(((
Les sauts de lignes n'existent pas en réalité ;-(
mamiemando
Messages postés
33079
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
23 avril 2024
7 749
16 juil. 2009 à 10:39
16 juil. 2009 à 10:39
Ah c'est même mieux que ce que j'ai fait avec ton sort, car je viens de percuter qu'avec juste un sort (comme j'ai fait sur le résultat du grep) on trie en priorité sur la colonne 2 puis sur le jour, puis sur le mois, et enfin sur l'année ce qui ne correspond pas au résultat que papavers souhaite.
En fait je n'avais jamais fait gaffe qu'on pouvait faire tout ça avec sort.
En fait je n'avais jamais fait gaffe qu'on pouvait faire tout ça avec sort.
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 895
16 juil. 2009 à 10:47
16 juil. 2009 à 10:47
Et bien plus encore ;-))
papavers
Messages postés
24
Date d'inscription
mardi 6 mai 2008
Statut
Membre
Dernière intervention
10 mai 2012
1
16 juil. 2009 à 11:59
16 juil. 2009 à 11:59
Merci à vous Mamiemando et Jipicy.
Comme tu l'as dit Mamiemando on ne recuperait pas forcement la ligne voulue.
Et c'est plus performant en utilisant juste le sort, car avec un tres gros fichier, utiliser grep n'est pas avantageux.
Je teste de suite.
A toute.
Comme tu l'as dit Mamiemando on ne recuperait pas forcement la ligne voulue.
Et c'est plus performant en utilisant juste le sort, car avec un tres gros fichier, utiliser grep n'est pas avantageux.
Je teste de suite.
A toute.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
papavers
Messages postés
24
Date d'inscription
mardi 6 mai 2008
Statut
Membre
Dernière intervention
10 mai 2012
1
16 juil. 2009 à 12:09
16 juil. 2009 à 12:09
Salut Jipicy,
En testant ta commande je n'obtiens pas le même résultat,
acs104 linus>cat test.2
205321505 5 21/06/2009
205321505 7 25/05/2009
202003245 2 12/05/2009
205432152 5 14/07/2009
206434434 5 12/07/2009
206434434 5 18/07/2009
acs104 linus>sort -r +0 -1 -k 3.4,3.6 -k 3.1,3.3 test.2 | sort -ru +0 -1
206434434 5 18/07/2009
205432152 5 14/07/2009
205321505 7 25/05/2009 (je devrais avoir 205321505 5 21/06/2009, plus récente date)
202003245 2 12/05/2009
acs104 linus>
Bon A +
En testant ta commande je n'obtiens pas le même résultat,
acs104 linus>cat test.2
205321505 5 21/06/2009
205321505 7 25/05/2009
202003245 2 12/05/2009
205432152 5 14/07/2009
206434434 5 12/07/2009
206434434 5 18/07/2009
acs104 linus>sort -r +0 -1 -k 3.4,3.6 -k 3.1,3.3 test.2 | sort -ru +0 -1
206434434 5 18/07/2009
205432152 5 14/07/2009
205321505 7 25/05/2009 (je devrais avoir 205321505 5 21/06/2009, plus récente date)
202003245 2 12/05/2009
acs104 linus>
Bon A +
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 895
16 juil. 2009 à 12:13
16 juil. 2009 à 12:13
Quel système ? Ou distrib ? Quel shell ?
Parce que chez moi avec un copier:coller de ton fichier "test2" :
Parce que chez moi avec un copier:coller de ton fichier "test2" :
[tmpfs]$ cat toto?? ;-\
205321505 5 21/06/2009
205321505 7 25/05/2009
202003245 2 12/05/2009
205432152 5 14/07/2009
206434434 5 12/07/2009
206434434 5 18/07/2009
[tmpfs]$ sort -r +0 -1 -k 3.4,3.6 -k 3.1,3.3 toto | sort -ru +0 -1
206434434 5 18/07/2009
205432152 5 14/07/2009
205321505 5 21/06/2009
202003245 2 12/05/2009
[tmpfs]$
papavers
Messages postés
24
Date d'inscription
mardi 6 mai 2008
Statut
Membre
Dernière intervention
10 mai 2012
1
16 juil. 2009 à 12:21
16 juil. 2009 à 12:21
Eh ben!
Je suis sous solaris korn shell.
acs104 root#cat /etc/release
Solaris 8 HW 7/03 s28s_hw3wos_05a SPARC
Copyright 2003 Sun Microsystems, Inc. All Rights Reserved.
Assembled 11 June 2003
acs104 root#
Je suis sous solaris korn shell.
acs104 root#cat /etc/release
Solaris 8 HW 7/03 s28s_hw3wos_05a SPARC
Copyright 2003 Sun Microsystems, Inc. All Rights Reserved.
Assembled 11 June 2003
acs104 root#
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 895
16 juil. 2009 à 13:05
16 juil. 2009 à 13:05
Ben là je ne peux plus rien pour toi, n(ayant pas de quoi testé dans un environnement comme le tien.
J'ai trouvé ça, si ça peut t'aider...
http://www.softpanorama.org/Tools/sort.shtml
http://docs.sun.com/app/docs/doc/817-3936/6mjgdbvid?a=view
J'ai trouvé ça, si ça peut t'aider...
http://www.softpanorama.org/Tools/sort.shtml
http://docs.sun.com/app/docs/doc/817-3936/6mjgdbvid?a=view
papavers
Messages postés
24
Date d'inscription
mardi 6 mai 2008
Statut
Membre
Dernière intervention
10 mai 2012
1
16 juil. 2009 à 13:55
16 juil. 2009 à 13:55
Merci pour les adresses, j'etais déja sur l'une d'elles.
Je vous tiens informé dès que j'ai une amélioration
A +
Je vous tiens informé dès que j'ai une amélioration
A +
papavers
Messages postés
24
Date d'inscription
mardi 6 mai 2008
Statut
Membre
Dernière intervention
10 mai 2012
1
16 juil. 2009 à 16:51
16 juil. 2009 à 16:51
Là j'ai ajouter un autre sort sur l'année ( au cas ou ce serait different).
En fait sur le dernier sort il prend en compte la valeur de la colonne 2 :
acs104 linus>cat test.3
205321505 5 21/06/2009
205321505 7 25/05/2009
202003245 2 12/05/2009
205432152 5 14/07/2009
206434434 5 12/07/2009
206434434 5 18/07/2009
acs104 linus>
acs104 linus>cat test.2
205321505 7 21/06/2009
205321505 5 25/05/2009
202003245 2 12/05/2009
205432152 5 14/07/2009
206434434 5 12/07/2009
206434434 5 18/07/2009
acs104 linus>
acs104 linus>sort -r +0 -1 -k 3.7,3 -k 3.4,3.5 -k 3.1,3.2 test.3 | sort -ru +0 -1
206434434 5 18/07/2009
205432152 5 14/07/2009
205321505 7 25/05/2009
202003245 2 12/05/2009
acs104 linus>sort -r +0 -1 -k 3.7,3 -k 3.4,3.5 -k 3.1,3.2 test.2 | sort -ru +0 -1
206434434 5 18/07/2009
205432152 5 14/07/2009
205321505 7 21/06/2009
202003245 2 12/05/2009
acs104 linus>
En fait sur le dernier sort il prend en compte la valeur de la colonne 2 :
acs104 linus>cat test.3
205321505 5 21/06/2009
205321505 7 25/05/2009
202003245 2 12/05/2009
205432152 5 14/07/2009
206434434 5 12/07/2009
206434434 5 18/07/2009
acs104 linus>
acs104 linus>cat test.2
205321505 7 21/06/2009
205321505 5 25/05/2009
202003245 2 12/05/2009
205432152 5 14/07/2009
206434434 5 12/07/2009
206434434 5 18/07/2009
acs104 linus>
acs104 linus>sort -r +0 -1 -k 3.7,3 -k 3.4,3.5 -k 3.1,3.2 test.3 | sort -ru +0 -1
206434434 5 18/07/2009
205432152 5 14/07/2009
205321505 7 25/05/2009
202003245 2 12/05/2009
acs104 linus>sort -r +0 -1 -k 3.7,3 -k 3.4,3.5 -k 3.1,3.2 test.2 | sort -ru +0 -1
206434434 5 18/07/2009
205432152 5 14/07/2009
205321505 7 21/06/2009
202003245 2 12/05/2009
acs104 linus>
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 895
16 juil. 2009 à 17:10
16 juil. 2009 à 17:10
Un détail chez moi qui a de l'importance, le numéro du caractère utilisé pour la délimitation...
[tmpfs]$ cat test2 205321505 5 21/06/2009 205321505 7 25/05/2009 202003245 2 12/05/2009 205432152 5 14/07/2009 206434434 5 12/07/2009 206434434 5 18/07/2009 [tmpfs]$ sort -r +0 -1 -k 3.7,3 -k 3.4,3.5 -k 3.1,3.2 test2 | sort -ru +0 -1 206434434 5 18/07/2009 205432152 5 14/07/2009 205321505 7 25/05/2009 202003245 2 12/05/2009 [tmpfs]$ sort -r +0 -1 -k 3.7,3 -k 3.4,3.6 -k 3.1,3.3 test2 | sort -ru +0 -1 206434434 5 18/07/2009 205432152 5 14/07/2009 205321505 5 21/06/2009 202003245 2 12/05/2009 [tmpfs]$? ;-\
papavers
Messages postés
24
Date d'inscription
mardi 6 mai 2008
Statut
Membre
Dernière intervention
10 mai 2012
1
16 juil. 2009 à 20:14
16 juil. 2009 à 20:14
Salut Jipicy,
sous solaris les 2 commandes me donnent le meme resultat.
acs104 linus>cat test.2
205321505 5 21/06/2009
205321505 7 25/05/2009
202003245 2 12/05/2009
205432152 5 14/07/2009
206434434 5 12/07/2009
206434434 5 18/07/2009
acs104 linus>sort -r +0 -1 -k 3.7,3 -k 3.4,3.5 -k 3.1,3.2 test.2 | sort -ru +0 -1
206434434 5 18/07/2009
205432152 5 14/07/2009
205321505 7 25/05/2009
202003245 2 12/05/2009
acs104 linus>sort -r +0 -1 -k 3.7,3 -k 3.4,3.6 -k 3.1,3.3 test.2 | sort -ru +0 -1
206434434 5 18/07/2009
205432152 5 14/07/2009
205321505 7 25/05/2009
202003245 2 12/05/2009
Là je vais essayer de voir avec nawk.
Merci encore
sous solaris les 2 commandes me donnent le meme resultat.
acs104 linus>cat test.2
205321505 5 21/06/2009
205321505 7 25/05/2009
202003245 2 12/05/2009
205432152 5 14/07/2009
206434434 5 12/07/2009
206434434 5 18/07/2009
acs104 linus>sort -r +0 -1 -k 3.7,3 -k 3.4,3.5 -k 3.1,3.2 test.2 | sort -ru +0 -1
206434434 5 18/07/2009
205432152 5 14/07/2009
205321505 7 25/05/2009
202003245 2 12/05/2009
acs104 linus>sort -r +0 -1 -k 3.7,3 -k 3.4,3.6 -k 3.1,3.3 test.2 | sort -ru +0 -1
206434434 5 18/07/2009
205432152 5 14/07/2009
205321505 7 25/05/2009
202003245 2 12/05/2009
Là je vais essayer de voir avec nawk.
Merci encore
papavers
Messages postés
24
Date d'inscription
mardi 6 mai 2008
Statut
Membre
Dernière intervention
10 mai 2012
1
17 juil. 2009 à 14:14
17 juil. 2009 à 14:14
Bonjour à tous,
Finalement j'ai pu avoir une solution, c'est pas vraiment top mais ça me donne le bon résultat
En fait j'ai remarqué que sous Solaris le contenu du champ 2 influence le dernier sort. J'utilise donc nawk pour changer la position des champs, ensuite j'utilise la commande uniq
acs201 linus>cat test.3
205321505 5 21/06/2009
205321505 7 25/05/2009
202003245 2 12/05/2009
205432152 5 14/07/2009
206434434 5 12/07/2009
206434434 10 18/05/2009
acs201 linus>sort -r +0 -1 -k 3.7,3 -k 3.4,3.6 -k 3.1,3.3 test.3 | nawk '{print($2,$3,$1)}' | uniq -n2 | nawk '{print($3,$1,$2)}'
206434434 5 12/07/2009
205432152 5 14/07/2009
205321505 5 21/06/2009
202003245 2 12/05/2009
acs201 linus>
Bon si vous avez une meilleure proposition, suis preneur!!!!!!!!!
Finalement j'ai pu avoir une solution, c'est pas vraiment top mais ça me donne le bon résultat
En fait j'ai remarqué que sous Solaris le contenu du champ 2 influence le dernier sort. J'utilise donc nawk pour changer la position des champs, ensuite j'utilise la commande uniq
acs201 linus>cat test.3
205321505 5 21/06/2009
205321505 7 25/05/2009
202003245 2 12/05/2009
205432152 5 14/07/2009
206434434 5 12/07/2009
206434434 10 18/05/2009
acs201 linus>sort -r +0 -1 -k 3.7,3 -k 3.4,3.6 -k 3.1,3.3 test.3 | nawk '{print($2,$3,$1)}' | uniq -n2 | nawk '{print($3,$1,$2)}'
206434434 5 12/07/2009
205432152 5 14/07/2009
205321505 5 21/06/2009
202003245 2 12/05/2009
acs201 linus>
Bon si vous avez une meilleure proposition, suis preneur!!!!!!!!!