À l'aide de windows/dos shell/commandes de traitement par lots, comment dois-je prendre un fichier et de ne garder que des lignes uniques?
Dire que j'ai un fichier comme ceci:
apple
pear
lemon
lemon
pear
orange
lemon
Comment puis-je faire en sorte que je ne garde que les lignes uniques, de sorte que je reçois:
apple
pear
lemon
orange
Je peux soit modifier le fichier d'origine ou en créer un nouveau.
Je pense il y a un moyen pour numériser l'original fichier ligne à ligne, de vérifier si la ligne existe dans le nouveau fichier, puis d'en ajouter si ce n'est pas. Je ne suis pas traiter de très gros fichiers ici.
OriginalL'auteur Kache | 2012-10-11
Vous devez vous connecter pour publier un commentaire.
Ce qu'il fait: trie les entrées d'abord, et puis s'en va mais de façon séquentielle et sorties uniquement si la ligne en cours est différente de la précédente. Il aurait été plus simple si ce n'est pour le besoin de gérer les caractères spéciaux (c'est pourquoi ces
setlocal/endlocal
sont pour).Il a juste fait écho lignes de
stdout
, si vous souhaitez écrire dans le fichier de le faire (en supposant que vous avez nommé votre lotmyUniq.bat
)myUniq >>output.txt
echo ... >> myUniq.bat
à chaque ligne, courumyUniq
, puis supprimé, tout à la fois.Content d'avoir pu aider. Si vous êtes ouvert à
powershell
, vous pouvez également utiliser de simples doublures 1: (non triées)gc uniqinput.txt |select -unique
ou (tri)gc uniqinput.txt |sort|unique
Merci, mais pas travaille pour de tels fichiers 0000\n1111\n2222\n. (\n - réel CRLF) imprime Juste 1111 et 2222. Peut-être 0000 dire quelque chose specifal pour le lot. De toute façon mon veuillez prendre mon vote 🙂
Bonne prise il y a une chose amusante lorsque l'on compare les zéros avec aucun (comme la valeur n'est pas définie en ce point). Ceci est probablement dû au fait que cmd tente une comparaison numérique. J'ai changé la comparaison stricte des chaînes de caractères (par l'ajout de guillemets, doit être fait de toute façon) - qui devrait corriger le problème
OriginalL'auteur wmz
Il n'y a pas de moyen facile de le faire à partir de la ligne de commande, sans un programme supplémentaire.
uniq faire ce que vous souhaitez.
Ou vous pouvez télécharger CoreUtils pour Windows pour obtenir les outils GNU. Ensuite, vous pouvez simplement utiliser
sort -u
pour obtenir ce que vous voulez.Soit l'un de ceux qui devraient être appelées à partir d'un fichier batch.
Personnellement, si vous avez besoin de faire beaucoup de manipulation de texte comme ça, je pense que vous auriez mieux fait de se Cygwin. Ensuite, vous auriez un accès facile à
sort
,sed
,awk
,vim
, etc.OriginalL'auteur embedded.kyle
Exécuter PowerShell à partir de l'invite de commande.
En supposant que les éléments se trouvent dans un fichier d'appel fruits.txt seront mis à l'unique lignes uniques.txt:
type fruits.txt |sort-Object -unique |Out-File uniques.txt
OriginalL'auteur user3768049
J'ai aussi utilisé Powershell à partir de l'invite de commande, dans le répertoire dans lequel mon fichier texte, puis j'ai utilisé le chat de commande, la commande de tri, et d'Obtenir Unique applet de commande, comme indiqué au http://blogs.technet.com/b/heyscriptingguy/archive/2012/01/15/use-powershell-to-choose-unique-objects-from-a-sorted-list.aspx.
Elle ressemblait à ça:
OriginalL'auteur drnexus
L'utilisation de GNU sorte utilitaire:
Si vous êtes sur Windows et l'utilisation de Git, puis trier et beaucoup d'autres fonctionnalités utiles sont déjà ici:
C:\Program Files\Git\usr\bin\
Il suffit d'ajouter ce chemin d'accès à votre %PATH% variable d'environnement.
OriginalL'auteur user247850
Vous pouvez utiliser la commande de TRI
par exemple
SORT test.txt > Sorted.txt
OriginalL'auteur user2878888