$ cat data.txt
aaaaaa
aaaaaa
cccccc
aaaaaa
aaaaaa
bbbbbb
$ cat data.txt | uniq
aaaaaa
cccccc
aaaaaa
bbbbbb
$ cat data.txt | sort | uniq
aaaaaa
bbbbbb
cccccc
$
Le résultat dont j'ai besoin est d' afficher toutes les lignes du fichier d'origine en supprimant tous les doublons (pas uniquement les suivants), tout en maintenant l'ordre d'origine des instructions dans le fichier .
Ici, dans cet exemple, le résultat que je cherchais était
aaaaaa
cccccc
bbbbbb
Comment puis-je effectuer cette uniq
opération généralisée en général?
text-processing
uniq
Lazer
la source
la source
{ if (!seen[$0]++) print }
if
,print
, les parenthèses et les accolades:awk '!seen[$0]++'
'!LarryWall[$0]++'
pour tous les soucis, mais "vu" aide les gens à mieux comprendre le programme.John a un outil appelé
unique
:Obtenir la même chose sans outils supplémentaires dans une seule ligne de commande est un peu plus complexe:
nl
imprime les numéros de ligne devant les lignes, donc si noussort
/uniq
derrière elles, nous pouvons restaurer l’ordre initial des lignes.sed
supprime simplement les numéros de ligne par la suite;)la source
nl -ba -nrz data.txt | sort -k2 -u | sort | cut -f2
Je préfère utiliser ceci:
cat -n
ajoute des numéros de ligne,sort --key=2.1 -b -u
trie sur le deuxième champ (après les numéros de ligne ajoutés), en ignorant les espaces en début de ligne, en conservant des lignes uniquessort -n
trie dans un ordre numérique strictcut -c8-
conservez tous les caractères de la colonne 8 dans EOL (c.-à-d., omettez les numéros de ligne que nous avons inclus)la source
Perl a un module que vous pouvez utiliser qui inclut une fonction appelée
uniq
. Donc, si vous avez chargé vos données dans un tableau en Perl, vous appelez simplement la fonction comme ceci pour la rendre unique, tout en maintenant la commande d'origine.Vous pouvez en savoir plus sur ce module ici: Liste :: MoreUtils
la source