Eu tenho um arquivo de texto enorme que se parece com isso:
36,53,90478,0.58699759849,0.33616,4.83449759849,0.0695335954050315,3
36,53,90478,0.58699759849,0.33616,4.83449759849,0.0695335954050315,8
36,53,90478,0.58699759849,0.33616,4.83449759849,0.0695335954050315,14
36,53,15596,0.58454577855,0.26119,2.24878677855,0.116147072052964,12
A saída desejada é esta:
36,53,90478,0.58699759849,0.33616,4.83449759849,0.0695335954050315,MI-03
36,53,90478,0.58699759849,0.33616,4.83449759849,0.0695335954050315,MI-08
36,53,90478,0.58699759849,0.33616,4.83449759849,0.0695335954050315,MI-14
36,53,15596,0.58454577855,0.26119,2.24878677855,0.116147072052964,MI-12
Eu tentei outros posts relevantes aqui e em outras comunidades, mas não consegui exatamente o que queria.
ATUALIZAR
Essa é a pergunta cruzada (eu queria respostas Unix / perl e soluções batch / powershell para isso.) Que tem respostas interessantes.
"1 2 3 4" | awk '{$2=$2;print $0}'
fornece:1 2 3 4
(apenas 1 espaço (ou OFS) restante entre os campos). ex2)echo "1,,,2,3,,,,4" | awk -F',' '{$2=$2;print $0}'
fornece:1 2 3 4
(vírgulas se tornaram espaços). Pode haver outros efeitos colaterais. Teste e adote outra abordagem (gsub em uma variável de cópia de $ 0, por ex) se a atribuição de um campo tiver efeitos colaterais prejudiciais.Você pode tentar usar
awk
:fonte
Aqui está a solução perl:
O
-a
sinalizador permite tratar a entrada como matriz, com base no separador especificado com-F
. Basicamente, alteramos o último item desse array e o reconstruímos viajoin
comando.fonte
sprintf
é a idéia central da sua resposta. Não é como se não estivesse certo, apenas não oferecendo algo diferente da resposta aceita. +1 de qualquer maneira.sprintf()
é usado normalmente ao escrever uma sequência de formato específico em uma variável, e é por isso que é usada em muitos outros idiomas. Também posso escrever em Python - o Python não tem,sprintf()
mas a ideia principal será a mesma, independentemente - escrever uma string formatada em uma variável. Como alternativa, podemos operar itens de matriz diretamente e apenas imprimi-los. Com este tipo de perguntas há quantidade finita de soluções, basicamente, é o que estou tentando dizerCom dados de entrada como:
em text.csv
o código abaixo
produz resultados como:
fonte
Tcl
Aqui está minha solução, feita usando Tcl, que lê o arquivo input.csv e coloca o resultado no arquivo output.csv
demonstração
fonte