4 votes

trier les données en fonction des valeurs de la 1ère et de la 2ème colonne et ne sortir que les valeurs uniques de la 1ère et de la 2ème colonne

Je dispose d'un fichier d'entrée contenant les données suivantes :

AUD 100 20
USD 200 30
INR 10  20
AUD 100 30
USD 200 40
EUR 50  60
EUR 50  70
AUD 100 11
USD 200 55
INR 10  35

Je cours :

cat filename | sort -u -k1,2

Le résultat est le suivant :

AUD 100 20
EUR 50  60
INR 10  20
USD 200 30

Ce que je comprends, c'est que sort -u k1,2 trie les données et donne le résultat en fonction de la combinaison unique des valeurs des colonnes 1 et 2. Sur la base de cette compréhension, j'exécute :

  cat filename |  sort -u -k1 

pour obtenir un résultat basé sur les valeurs uniques de la colonne #1. Je m'attendais donc à ce résultat :

AUD 100 20
EUR 50  60
INR 10  20
USD 200 30

Mais la production réelle a été la suivante :

AUD 100 11
AUD 100 20
AUD 100 30
EUR 50  60
EUR 50  70
INR 10  20
INR 10  35
USD 200 55
USD 200 30
USD 200 40

Quelqu'un peut-il nous expliquer ce qui se passe avec la sort -u -km,n option ?

2voto

mauro Points 4114

Les numéros des champs de clés sont spécifiés avec -k <start>,<end> . Si vous ne spécifiez pas <end> il passe par défaut à l'option fin de ligne . Ainsi :

sort -u -k 1 filename

triera et imprimera les valeurs uniques en fonction de la valeur ligne entière . Si vous souhaitez ne prendre en compte que la première clé (votre résultat escompté), vous devez.. :

sort -u -k 1,1 filename

P.S. Vous n'avez pas vraiment besoin de tuyaux cat la sortie vers sort ...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X