J'aimerais trier un fichier texte en fonction de la 3ème colonne de données, et non du 3ème caractère, à l'aide de commandes CLI Windows pures. Les commandes seraient placées dans un fichier de commandes.
Les données ressembleraient à quelque chose comme
#filename seqno phasename a b c scale Rwp
blah_001.xye 1 corundum 3 3 12 0.001 3
blah_001.xye 1 silicon 5.4 5.4 5.4 0.002 3
blah_002.xye 2 corundum 3.1 3.1 12.1 0.002 3.5
blah_002.xye 2 silicon 5.41 5.41 5.41 0.004 3.5
blah_003.xye 3 corundum 3.2 3.2 12.2 0.001 3.1
blah_003.xye 3 silicon 5.42 5.42 5.42 0.002 3.1
blah_004.xye 4 corundum 3.4 3.4 12.2 0.001 3.2
blah_004.xye 4 silicon 5.43 5.43 5.43 0.002 3.2
blah_005.xye 5 corundum 3.5 3.5 12.3 0.001 3.9
blah_005.xye 5 silicon 5.44 5.44 5.44 0.002 3.9
blah_006.xye 6 corundum 3.6 3.6 12.3 0.001 3.1
blah_006.xye 6 silicon 5.45 5.45 5.45 0.002 3.1
Je veux trier par phasename. Ce serait bien si je pouvais garder la première rangée en place. Il y aura plus de 5 colonnes après la 3ème et il y aura plus de lignes que cela, mais le tri se fera toujours par la 3ème colonne.
J'ai vu cette question , mais je ne peux pas déchiffrer les commandes for.
FOR
commande , ou sur la propre documentation de Microsoft sur laFOR
commande , voire sur la sortie deHELP FOR
.Réponses:
Votre fichier utilise un format de largeur fixe. Vous souhaitez donc toujours commencer le tri à la position 21.
La
SORT
commande fournit une option pour effectuer chaque comparaison de ligne en commençant à une position particulière de la ligne. Le seul inconvénient est qu'il ne fournit pas de mécanisme pour conserver l'enregistrement d'en-tête en haut.L'astuce consiste donc à utiliser
SET /P
pour lire la première ligne et l'écrire dans un nouveau fichier. Utilisez ensuiteMORE +1
pour lire tout sauf la 1ère ligne, puis dirigez-le versSORT \+21
et ajoutez le résultat au nouveau fichier. La dernière chose à faire est d'écraser le fichier d'origine avec le nouveau fichierMOVE
.Il y a des limites à cette stratégie:
Sinon, vous pouvez utiliser mon utilitaire JSORT.BAT pour effectuer facilement et efficacement le tri à l'aide d'une commande simple. Le MOVE est toujours requis.
JSORT est un script pur (hybride JScript / batch) qui s'exécute de manière native sur toute machine Windows à partir de XP. Aucun fichier exe tiers n'est nécessaire.
Notez que JSORT utilise par défaut une recherche sensible à la casse, contrairement à la commande SORT intégrée. Ce n'est pas un problème avec votre exemple de texte, mais si vous souhaitez ignorer la casse, ajoutez simplement l'
/I
option.JSORT a une limite de taille en raison du fait que le fichier entier doit tenir dans une seule variable chaîne en mémoire. Je ne suis pas sûr de la valeur exacte, mais je pense que la taille de fichier maximale prise en charge est un peu inférieure à 1 Go.
Lisez l'aide intégrée pour en savoir plus sur d'autres fonctionnalités intéressantes prises en charge par JSORT.
la source