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 alvos tem mais de 3.000 linhas, portanto, deve ser um processo automatizado.
Obrigado!
Respostas:
Powershell um forro:
Notas:
1. Usa PS 2
join
sintaxe, que é mais compacta.2. Usando
,
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 pegasse sua descrição literalmente, eles deveriam ser mantidos . Se você desejar, remova|% {$_.trim()}
(mas entãosort
não funcionará "como esperado" para o seu exemplo com espaços iniciais3. 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 após a vírgula) para a que você selecionou.4. A codificação padrão para saída no PS é Unicode (UTF-16). Você pode mudá-lo usando
| out-file -Encoding <encoding_type>
em vez de redirecionamento>
se você precisa controlar isso. Para ver as codificações disponíveis, executehelp out-file -full
fonte
sort -culture
para alterar o agrupamento (por exemplo,sort -culture en-us
para inglês dos EUA). Pode ser também um problema com a codificação do arquivo de entrada, mas você provavelmente veria 'lixo' como resultado.Aqui está um que deveria fazê-lo em python.
fonte
print(row)
retardá-lo um pouco?