1 votes

Trier chaque ligne autonome par ordre alphabétique

Je veux trier certains éléments par ordre alphabétique, mais d'une manière très spécifique.

J'ai, par exemple, la liste suivante, chaque élément séparé par une virgule:

monkeys, big dogs, cats
pineapple, banana, orange
yellow, red, blue, green
silver, gold, platinum
delphi, java, c++, visual basic

Un élément ici est défini par le morceau de texte: 1. commençant au début d'une ligne et se terminant juste avant la première virgule; 2. entouré de virgules et 3. commençant juste après la dernière virgule et se terminant à la fin de la ligne. Ainsi, les espaces ne sont pas des séparateurs, comme dans "big dogs" forme un seul élément.

Je veux trier chaque ligne par ordre alphabétique, SANS changer l'ordre des lignes.

Mon résultat souhaité serait:

big dogs, cats, monkeys
banana, orange, pineapple
blue, green, red, yellow
gold, platinum, silver
c++, delphi, java, visual basic

Ma liste cible comporte plus de 3000 lignes, donc cela devrait être un processus automatisé.

Merci!

1voto

Ryan Points 3525

Voici un exemple en python qui devrait faire l'affaire.

import csv

f = open("sortrows.csv", 'rb')
reader = csv.reader(f)

outf = open("sortedrows.csv", 'w')
for row in reader:
    row.sort()
    outf.write(",".join(row) + "\n")

f.close()
outf.close()

1voto

Rich Points 101

Une seule ligne de code PowerShell:

$sep=","; gc infile.txt |% {$line=($_ -split $sep)|% {$_.trim()}|sort;$line -join $sep} >outfile.txt

Notes:
1. Utilise la syntaxe join de PS 2, qui est plus compacte.
2. L'utilisation de , comme séparateur (tel qu'indiqué) va supprimer tous les espaces avant et après les mots. C'est ce que je suppose du contexte que vous voulez, mais si je prends votre description littéralement, ils devraient être conservés. Si c'est le cas, retirez |% {$_.trim()} (mais alors sort ne fonctionnera pas 'comme prévu' pour votre exemple avec des espaces avant les mots)
3. Vous pouvez utiliser , (ou n'importe quoi d'autre, en fait) comme séparateur de sortie (-join ", ") cela normalisera toute entrée mixte (avec ou sans espaces après la virgule) vers celui que vous avez sélectionné.
4. L'encodage par défaut pour la sortie en PS est Unicode (UTF-16). Vous pouvez le changer en utilisant | out-file -Encoding au lieu de la redirection > si vous avez besoin de contrôler cela. Pour voir les encodages disponibles, exécutez help out-file -full

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X