Problemas com mesclagem horizontal de arquivos csv sob o Cygwin

3

Eu tenho dois arquivos csv:

test1.csv
1
2
3
4

test2.csv
6
7
8
9

Eu quero mesclar horizontalmente esses dois arquivos. Para fazer isso eu uso paste -d , test1.csv test2.csv > paste.csv Se eu abrir este arquivo no bloco de notas, ele parece correto, por exemplo,

paste.csv
1,6
2,7
3,8
4,9

No entanto, se eu carregar o paste.csv no Excel, parece

O que eu estou sentindo falta? Obrigado antecipadamente!

PS Isso pode não importar, mas estou no Windows e usando o Cygwin.

ATUALIZAÇÃO: Quando abri o paste.csv no bloco de notas, notei algo bizarro. Parece haver um caractere invisível entre o número e a vírgula. Por exemplo, se eu colocar meu cursor entre 1 e, e o backspace de hit, nada acontece. Quando eu bato de volta no backspace, o 1 é deletado como esperado. Se eu excluir todos esses caracteres invisíveis e, em seguida, carregar o paste.csv no excel, está correto!

    
por Jacob H 02.06.2015 / 01:08

1 resposta

3

O Unix representa novas linhas com o caractere LF (feed de linha = \n = ^J = 10 decimal = 012 octal = 0x0a hexadecimal). O Windows representa novas linhas com a sequência de dois caracteres CR, LF (CR = retorno de carro = \r = ^M = 13 decimal = 015 octal = 0x0d hexadecimal). Quando um arquivo de texto do Windows é processado por um utilitário Unix, cada linha termina com um caractere CR falso.

Os utilitários Cygwin são portas diretas das ferramentas do Linux. Eles não lidam com arquivos de texto do Windows especialmente, então os caracteres CR acabam como conteúdo de linha. Em seu arquivo colado, há um CR antes de cada vírgula.

Você pode converter os arquivos para o formato Unix primeiro:

dos2unix *.csv
paste -d , test1.csv test2.csv > paste.csv

Ou você pode simplesmente remover os caracteres CR. Aqui ele trabalha para removê-los de dentro da linha; algumas outras manipulações de texto exigiriam removê-las antes do processamento.

paste -d , test1.csv test2.csv | tr -d '\r' > paste.csv
    
por 02.06.2015 / 02:07