Peut-sort | uniq ou de tri | awk compter répétée des valeurs d'une colonne?
En utilisant les données suivantes:
$cat p1.csv
R,3
R,4
S,1
S,2
S,3
R,2
T,4
R,3
ST,4
RST,2
RSTR,4
Premier tri basé sur colonne 2:
$cat p1.csv | sort -t "," -k2
S,1
R,2
RST,2
S,2
R,3
R,3
S,3
R,4
RSTR,4
ST,4
T,4
Je veux compter le nombre de 1, 2, 3, et 4 de la deuxième colonne. Quelque chose comme $cat p1.csv | sort-t "," -k2 | uniq -f2 -c .....Peut uniq être appliqué à une colonne? L'-f2 ne pas appliquer correctement uniq pour le bon champ. La sortie devrait prendre la première occurrence d'une valeur unique dans la deuxième colonne et le nombre d'entre eux. Par conséquent, les données doivent d'abord être triés sur la deuxième colonne. Une sortie correcte serait:
1 S,1
3 R,2
3 R,3
4 R,4
Suggestions?
- Je suis sûr qu'il peut être fait avec
awk
. Vous pourriez probablement faire quelque chose de beaucoup messier et vraiment exigeant un script à l'aide deuniq
,sort
,grep -c
autre, et il ne serait pas aussi efficace. - Je ne comprends pas votre sortie. où sont
ST, T, RST, RSTR
? qu'est-ce que la première colonne de sortie? - Remarquez que chacune des lignes suivantes sont la première instance, le nombre figurant dans la deuxième colonne: S,1 R,2 R,3 R,4. L'opération devrait s'arrêter à la première instance d'une uniq valeur dans la colonne deux et compter combien de uniq nombre apparaître. Donc @Kent, pour répondre à votre question, ST, T, PREMIER, RSTR ne sont pas considérés comme uniq. Seules les valeurs dans la colonne deux sont uniq.
Vous devez vous connecter pour publier un commentaire.
Votre question n'est pas très clair donc je viens de l'ingénierie inverse de votre sortie de votre entrée (en supposant qu'il existe une faute de frappe dans votre sortie puisque vous parlez de compter le nombre de 1, 2 et 3 de la colonne 2 et de montrer
2 R,2
). Vous aurez probablement besoin d'expliquer votre question un peu mieux -Explication:
Test:
De tri avec l'option-u
Pour trouver des entrées uniques basées sur une colonne, vous pouvez essayer de trier avec l'option-u (mais il ne vous donnera pas le compte si).
De la
man
page:Vous pouvez essayer quelque chose comme cela -
À L'Aide Uniq
Je ne suis pas sûr Uniq peut être effectuée sur une colonne séparées par un délimiteur d'autre qu'un vide. Atleast sur mon mac ça ne marche pas. Voici la page de manuel de référence
Donc, si vous pouvez supprimer le
,
délimiteur et exécutez la commande suivante, vous devriez obtenir le résultat souhaité.Test:
Je viens de tomber sur un cas intéressant de la répétition des valeurs du jeu de données qui a été facilement résolu et je voulais juste jeter dans le cas de quelqu'un qui pourrait être intéressé.
Je suis en ajoutant deux acquisitions (*) pour le jeu de données:
La nouvelle valeur comprend une entrée répétée R* 5. Le tri sur la colonne deux, nous voyons les nouvelles valeurs ci-dessous:
Remarquez comment la répétition de l'élément (R* 5) est compté comme deux entrées:
Pour enregistrer le compte pour uniq lignes, nous avons à uniq l'ensemble de données avant de compter le nombre de uniq lignes:
J'espère que ça aide quelqu'un qui pourrait avoir le même comptage exigence. Bonne chance! Et merci @Jaypal.