Estou usando o binário xls2csv
para traduzir o documento XLS para CSV na minha máquina Red Hat Linux.
Por exemplo: (da página man):
xls2csv -x "1252spreadsheet.xls" -b WINDOWS-1252 -c "ut8csvfile.csv" -a UTF-8
Mas notei as seguintes coisas, que causam problemas no meu script Bash:
-
A saída de CSV inclui espaços desnecessários (no lado esquerdo da palavra ou no lado direito da palavra)
Exemplo de sintaxe incorreta em CSV:
,"/var/adm/sys ldd/all /Comm/logs ","WORD "," WORD"
Exemplo de sintaxe correta em CSV:
,"/var/adm/sys ldd/all /Comm/logs",WORD,WORD
-
As aspas aparecem no CSV quando não são necessárias:
Exemplo de sintaxe incorreta em CSV:
," WORD ",
Exemplo de sintaxe correta no csv
,WORD,
Como posso alterar a saída para criar um arquivo CSV "limpo"?
Eu estou procurando um forro awk / sed / perl, ou qualquer outra solução que funcione em um script Bash.
Exemplo de arquivo CSV antes da correção:
1,"/var/adm/sys ldd/all /Comm/logs",34356,"234245 ",24245
2,"/var/adm/sys ldd/all
/Comm/debugs.txt"," 45356",435," 578 58976 "
3," add this line in crontab :",34356,"234245 ",24245
4,"1.0348 54 35.5"," 45356"," 435","578 "
4,"1 2 "," 45356 95857 "," 435","578 "
5,"1 2 "," 45356 95857 "," "435","578" "
6,"1.0348 54 35.5"," 45356"," "4""" ""35","578 "
7,"1.0348 54 35.5",""45356",""4"""""35,"578 "
Exemplo de arquivo CSV corrigido (após a correção):
1,"/var/adm/sys ldd/all /Comm/logs",34356,234245,24245
2,"/var/adm/sys ldd/all
/Comm/debugs.txt",45356,435,"578 58976"
3,"add this line in crontab :",34356,234245,24245
4,"1.0348 54 35.5",45356,435,578
4,"1 2","45356 95857",435,578
5,"1 2","45356 95857","435,578"
6,"1.0348 54 35.5",45356,"4""" ""35,578
7,"1.0348 54 35.5",""45356",""4"""""35,578
As vírgulas não podem aparecer nos campos.
Observe a nova linha explícita contida em um campo de line 2
.
Quando um campo está entre aspas duplas e não contém espaços em branco (por exemplo, linha 7 ""45356"
), essas aspas duplas não devem ser removidas porque o campo inteiro, incluindo as citações, é uma senha codificada.