Substitua vírgulas por dois pontos e mova todos os valores para uma linha

1

Eu inseri uma lista de números no Calc e os salvei como CSV para que todos os valores em uma linha sejam separados por vírgulas. Vou descrever o que estou procurando com o bash no seguinte exemplo:

ENTRADA

22,33
45,533

OUTPUT

22:33,45:533
    
por Oxwivi 01.01.2012 / 15:46

4 respostas

3

Não tenho certeza se entendi corretamente, mas para as entradas e saídas mostradas, o comando sed a seguir pode fazer a transformação, levando em conta que seu arquivo de entrada contém terminadores de linha CR-LF:

sed 's/,/:/g;s/ /,/g' <<<$(tr -d '\r' <input_file) | tee output_file.tmp
mv output_file.tmp input_file
    
por enzotib 01.01.2012 / 16:16
1

Solução sem binários externos - mas mais lenta (lê linha por linha e altera ', ' → ': ')

while read -u 3 -r line; do 
        echo -n "${line/,/:}," >> new_file
done 3< old_file
    
por arrange 02.01.2012 / 11:16
1

Ineficiente, mas com certeza funciona:

Abra o arquivo no gedit. Pressione Ctrl + H . Em find, digite , e, em replace, digite : . Em seguida, selecione Substituir Tudo.

Em seguida, abra novamente a tela Localizar e substituir. Na caixa Localizar, digite \n e deixe a caixa Substituir vazia. Em seguida, selecione Substituir Tudo.

É isso aí:)

    
por Thomas Boxley 02.01.2012 / 11:20
0

Isso funciona:

cat test| sed s/,/:/g | sed s/$/,/g | xargs

Mas produz:

22:33, 45:533,

Então você pode ter que usar essa versão mais longa para obter o resultado exato que você pediu:

cat test| sed s/,/:/g | sed s/$/,/g | xargs | sed "s/, /,/g"
Tenho certeza de que há maneiras melhores de fazer isso com o sed / awk, embora isso atinja o que você pede e seja muito fácil de ler.

    
por totaam 01.01.2012 / 16:14