Comando como 'column -t' mas agnóstico do tipo de codificação? [fechadas]

2

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?

por OhNoMast 18.12.2015 / 19:43

0 respostas