Classifique cada linha independente em ordem alfabética

1

Eu quero classificar alguns itens em ordem alfabética, mas de uma maneira muito específica.

Eu tenho, por exemplo, a seguinte lista, cada item separado por vírgula:

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

Um item aqui é definido pela parte do texto: 1. começando no começo de uma linha e terminando logo antes da primeira vírgula; 2. cercado por vírgulas e 3. começando logo após a última vírgula e terminando no final da linha. Então os espaços não são separadores, como em "big dogs" forma um único item.

Quero classificar cada linha em ordem alfabética, SEM alterar a ordem das linhas.

Meu resultado desejado seria:

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

Minha lista de segmentação tem mais de 3.000 linhas, portanto, deve ser um processo automatizado.

Obrigado!

    
por Daniel 19.10.2012 / 16:52

2 respostas

1

Porshell um revestimento:

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

Notas:
1. Usa a sintaxe PS 2 join , que é mais compacta.
2. Usar , como separador (como mostrado) removerá todos os espaços iniciais / finais das palavras. Isso é o que eu suponho do contexto que você quer, mas se eu pegar sua descrição literalmente, eles devem ser mantidos . Se você desejar, remova |% {$_.trim()} (mas, em seguida, sort não funcionará "como esperado" para o seu exemplo com espaços à esquerda)
3. Você pode usar ,<space> (ou qualquer outra coisa, como matéria) como separador de saída ( -join ", ") , isso normalizará qualquer entrada mista (com ou sem espaços depois da vírgula) para a que você selecionou.
4. A codificação padrão para saída no PS é Unicode (UTF-16). Você pode alterá-lo usando | out-file -Encoding <encoding_type> em vez de redirecionamento > se precisar controlar isso. Para ver as codificações disponíveis, execute help out-file -full

    
por 24.10.2012 / 14:45
1

Aqui está uma que deveria fazer isso em python.

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()
    
por 24.10.2012 / 01:59

Tags