He tous, J'ai un fichier ayant quelques colonnes. Je voudrais faire un tri pour la colonne 2, puis appliquer uniq pour la colonne 1. J'ai trouvé ce post parler de tri et uniq pour la même colonne, mais mon problème est un peu différent. Je pense à utiliser quelque chose en utilisant sort
et uniq
mais je ne sais pas comment. Merci.comment trier basé sur une colonne mais uniq basé sur une autre colonne?
Répondre
Vous pouvez utiliser un tuyau, mais il n'est pas en place.
Exemple:
$ cat initial.txt
1,3,4
2,3,1
1,2,3
2,3,4
1,4,1
3,1,3
4,2,4
$ cat initial.txt | sort -u -t, -k1,1 | sort -t, -k2,2
3,1,3
4,2,4
1,3,4
2,3,1
Résultat est trié par clé 2, unique par clé 1. Notez que le résultat est affiché sur la console, si vous le voulez dans un fichier, il suffit d'utiliser une redirection (> newFiletxt
)
autre solution pour ce genre d'opération plus complexe est de compter sur un autre outil (en fonction de vos préférences (et âge), awk, perl ou python)
EDIT: Si je comprends bien la nouvelle exigence, il est trié par Colum 2, colonne 1 est unique pour une colonne donnée 2:
$ cat initial.txt | sort -u -t, -k1,2 | sort -t, -k2,2
3,1,3
1,2,3
4,2,4
1,3,4
2,3,1
1,4,1
Est-ce que vous attendez? Sinon, je ne comprenais pas :-)
uniq
a besoin que les données soient en ordre de tri pour travailler, donc si vous sort
sur le deuxième champ, puis appliquer uniq
sur le premier champ, vous ne serez pas obtenir le résultat correct.
Vous voudrez peut-être essayer
sort -u -t, -k1,1 filename | sort -t, -k2,2
Merci Lobo .. mais je dois trier d'abord puis trouver les uniques dans la première colonne où il peut y avoir des valeurs en double dans la colonne 1 mais elles ne seront pas à côté de chaque autre. Je suis surpris que la commande uniq sous Linux n'ait pas de paramètre pour spécifier une colonne spécifique. Merci. – Ken
La commande 'uniq' vous donne l'option de choisir les champs. consultez les options '-f',' s' et autres. Êtes-vous à la recherche 'sort -t '' -k2,2 b | uniq -f1'? Pourriez-vous fournir un exemple d'entrée et de sortie que vous recherchez? – Lobo
mais les '-f' et' -s' passeront le PREMIER nombre de colonnes/caractères pour la comparaison d'unicité. Ils n'autorisent pas de colonnes spécifiques. La deuxième réponse de Bruce fonctionne pour ma tâche actuelle maintenant. Merci. – Ken
Juste pour être sûr que je suis ce que vous voulez dire correctement. Vous souhaitez trier un fichier en fonction de la deuxième colonne du fichier. Ensuite, vous voulez supprimer les doublons de la première colonne (une autre façon de dire en appliquant uniq à la première colonne!). cool, pour ce faire, vous devez effectuer trois tâches:
- trier la colonne sur laquelle uniq va être appliquée (puisque uniq peut travail que sur l'entrée triée).
- appliquer uniq sur la colonne triée.
- Triez la sortie en fonction des valeurs de la deuxième colonne.
En utilisant les tuyaux: La commande est
sort -t ',' -k1 fileName| awk '!x[$1]++' | sort -t ',' -k2
Notez que vous ne pouvez pas spécifier le premier champ uniq, vous pouvez utiliser le commutateur -f
pour sauter les premiers n
champs. Par conséquent, j'ai utilisé awk
pour remplacer uniq
.
Pouvez-vous expliquer cette commande awk? –
J'ai utilisé cette sort -t ',' -nk2
trie ici
1,2
2,5
3,1
to
3,1
1,2
2,5
- 1. Trier un tableau à deux dimensions basé sur une colonne
- 2. SQI Contrainte UNIQUE basé sur une autre valeur de colonne
- 3. données de groupe basé sur une colonne
- 4. sql sélectionnez basé sur la colonne dans une autre table
- 5. colonne affichage basé sur la valeur d'une autre colonne
- 6. JTable Tri basé sur la colonne cachée
- 7. Créer une table avec auto_increment basé sur une colonne différente
- 8. Excel ajouter la colonne du numéro de série basé sur une autre colonne groupée
- 9. jqgrid: comment trier sur une colonne différente
- 10. Regroupement MySQL par semaine, basé sur une colonne de date?
- 11. Excel: Commander une colonne basée sur une autre colonne
- 12. Contenu de la colonne basé sur une variable avec XPath
- 13. Distinct Enumerable DataTable basé sur la colonne?
- 14. info-bulle d'affichage basé sur autre colonne DataGrid
- 15. mysql une colonne en plusieurs colonnes basé sur la valeur
- 16. MySQL - JOIN basé sur CONVERT une colonne à NUMERIC
- 17. Permutation deux enregistrements Oracle basé sur une colonne de commande
- 18. instruction select SQL basé sur une colonne distincte des valeurs
- 19. jqgrid Masquer les colonnes sur un formulaire d'édition basé sur une autre valeur de colonne
- 20. MySQL ajouter colonne supplémentaire sur le résultat basé sur une autre requête
- 21. Colonne Oracle basée sur une autre colonne
- 22. Créer un numéro d'incrémentation basé sur une autre colonne pour former une clé en deux parties
- 23. requête SQL Server pour éliminer les doublons basé sur une seule colonne où une autre colonne peut différer
- 24. Comment trier ArrayList basé sur une valeur de variables
- 25. Accès Listbox basé sur la liste de valeurs - trier sur la colonne
- 26. Comment trier un vecteur basé sur les valeurs d'un autre
- 27. Oracle SQL - Comment puis-je répéter un caractère basé sur une valeur dans une colonne
- 28. Remplissage des valeurs dans Excel basé sur une autre colonne de valeurs
- 29. ajouter une nouvelle colonne au fichier basé sur un autre fichier
- 30. Mise à jour d'un enregistrement basé sur une colonne associée d'une autre table
Merci Bruce pour votre réponse. hmhm .... mais mon cas devra avoir trier d'abord puis uniq.Cela signifie que la première colonne peut avoir des valeurs en double, mais pas l'une à côté de l'autre. Plus d'idée? Je suis un débutant pour awk mais si vous avez une bonne solution pour cela. Je voudrais l'utiliser. Merci. – Ken
Pourriez-vous fournir un échantillon de données et le résultat attendu, par ex. sur http://pastebin.com? Je ne suis pas sûr de comprendre complètement – Bruce
Cool ... celui-ci fonctionne pour moi .. bien qu'il ne soit pas assez robuste pour une colonne non-consécutive. Ça va faire pour ma tâche actuelle. Merci tas. – Ken