Essencialmente, estou procurando uma versão agnóstica do tipo codificação do comando column -t
no linux.
Eu preciso converter arquivos delimitados em flat e depois gravar em um outfile. O delimitador específico varia (, | \ t).
Às vezes, mas nem sempre, os campos contêm caracteres de texto com diacríticos.
Como column -t
é compatível apenas com o tipo de codificação UTF-8, ele engasga com esses caracteres "engraçados":
Eu tentei usar comandos como file -bi
para determinar o tipo de codificação para que eu pudesse recodificar para UTF-8, mas eles apenas fornecem um "melhor palpite" (que falha quando os diacríticos começam na linha 100.000).
Até agora eu me deparei com o seguinte:
Este script em awk
converte colunas delimitadas em comprimento fixo, mas eu preciso de larguras de coluna variáveis:
$ awk -F@ '{for(i=1;i<=NF;i++){printf "%-20s", $i};printf "\n"}' input.csv
Este script em perl
encontra o comprimento máximo de cada coluna e define cada coluna para o tamanho máximo, mas também preciso que o número de colunas seja variável:
perl -F'\t' -lane '
BEGIN {
open I, "< inputfile";
for (<I>) {
chomp;
@x = split /\t/;
(length ($x[0]) > $f0) && ($f0 = length ($x[0]) + 1);
(length ($x[1]) > $f1) && ($f1 = length ($x[1]) + 1);
(length ($x[2]) > $f2) && ($f2 = length ($x[2]) + 1);
}
close I;
}
print "$F[0]" . " " x ($f0 - length ($F[0])), "$F[1]" . " " x ($f1 - length ($F[1])), "$F[2]" . " " x ($f2 - length ($F[2]));
' inputfile
Alguém tem um script que:
É executável no shell
O que column -t
faz (lida com larguras variáveis de coluna, lida com vários números de colunas, permite que você especifique seu delimitador)
AND é agnóstico do tipo de codificação?
Tags text file-format unicode csv