J'essaie d'imprimer des lignes en double à partir du fichierHandle, pas de les supprimer ou de rien d'autre que je vois sur d'autres questions. Je n'ai pas assez d'expérience avec Perl pour pouvoir le faire rapidement, alors je demande ici. Quelle est la façon de faire cela? P>
4 Réponses :
Utilisation de la standard Perl Shorthands:
perl -ne 'print ( $ARGV eq "-" ? "" : "$ARGV:" ), "$.:$_" if $seen{$_}++'
Pouvez-vous expliquer comment $ vu {$ _} ++ fonctionne exactement? Je reçois que cela attribue la valeur de la ligne actuelle à une table de hachage, mais quel est le ++ faire ici qui le fait de trouver des doublons?
$ vu {$ _} fait référence à une valeur dans le% de hachage vu, avec la clé $ _, qui est la ligne actuelle. L'opérateur ++ augmentera la valeur de hachage. Cela signifie que la première fois qu'une clé apparaît, sa valeur sera fausse et l'impression ne se produira pas. Les temps suivants sont vus, ce sera> 0, et l'impression sera donc exécutée et imprimer sans args par défaut imprime la variable $ _.
Ah, donc la clé du hachage est la ligne, mais la valeur est le nombre de fois que cela a été trouvé dans le fichier -1.
Perl Nerds impressionne l'enfer de moi. +2 Si je pouvais!
Essayez ceci
Je ferais imprimé sauf si vous n'existe pas de duplicates {$ _} code>. Et +1 pour
-w code>,
Utilisez strict code> et
Utiliser des avertissements code>.
Si vous avez un système de type UNIX, vous pouvez utiliser ou p> UNIQ code>:
Imprime des dupes une seule fois:
perl -ne "print if $seen{$_}++ == 1"
Ceci est comme trier fichier.txt | UNIQ -D code> (Imprimer uniquement des duplicats) dans une coque unix typique. Existe-t-il un équivalent simple de
trier fichier.txt | UNIQ -U code> (Imprimer uniquement des lignes uniques)?
Beaucoup dépend de la taille des entrées, des tailles de lignes et du nombre potentiel de doublons. Si les exigences de la mémoire sont faibles, les solutions avec un
% de duplicates code> sont adéquates.
Ils sont. J'utilise simplement le fichier pour vérifier rapidement quelque chose. Il ne semble pas qu'il n'y ait aucun duplicate, c'est bien.