J'ai un fichier contenant environ un million de lignes. Dans les lignes, j'ai un champ appelé transactionid
, qui a des valeurs répétitives. Ce que je dois faire, c'est les compter distinctement.
Peu importe combien de fois une valeur est répétée, elle ne doit être comptée qu'une seule fois.
text-processing
awk
Olgun Kaya
la source
la source
... No matter of how many times a value is repeated, it should be counted as 1. ...
cat <file_name> | awk -F"|" '{if ((substr($2,0,8)=='20120110')) print $28}' | sort -u | wc -l
la clause if était pour une autre vérification de la date car cela semble évident :)Réponses:
OK, en supposant que votre fichier est un fichier texte, les champs étant séparés par une virgule ','. Vous sauriez également quel champ
'transactionid'
est en termes de sa position. En supposant que votre'transactionid'
champ est le 7ème champ.Cela compterait les occurrences distinctes / uniques dans le 7ème champ et imprime le résultat.
la source
sort
avant launiq
commande.uniq
pour éliminer les enregistrements, ils doivent être côte à côte.Ce n'est peut-être pas la méthode la plus élégante, mais cela devrait fonctionner:
où
$1
est le numéro correspondant au champ à analyser.la source
Il n'est pas nécessaire de trier le fichier .. (
uniq
nécessite que le fichier soit trié)Ce script awk suppose que le champ est le premier champ délimité par les espaces.
la source
sort
implémentations sont conçues pour bien gérer les fichiers volumineux.