Conte o comprimento máximo de caracteres para todos os campos de dados em um arquivo csv simplificado e imprima em txt

1

Dado um CSV simplificado (máximo de uma linha por linha) com muitos campos de dados (> 50), como posso contar o comprimento máximo de caracteres para cada campo de dados e exportar todas as contagens para um arquivo txt? BTW, eu quero ignorar a primeira linha do arquivo que contém os títulos das colunas.

Por exemplo, dada a entrada

These,are,the,column_headings_which_may_be_very_long_but_they_don't_count
abcdefghij,abcdefghijk,abcdefghijkl,abc
aardvark,bat,cat,dog
ant,bee,cow,abcdefghijklm

O resultado final poderia ser algo como o seguinte, em que a primeira coluna indica os campos de dados no arquivo original e a segunda coluna indica o tamanho máximo do campo:

1 | 10
2 | 11
3 | 12
4 | 13

isto é, o comprimento do valor mais longo na coluna 1 é 10 ( abcdefghij ), o comprimento do valor mais longo na coluna 2 é 11 ( abcdefghijk ), etc.

Eu pesquisei no site um pouco e encontrei algumas maneiras que podem contar o comprimento máximo de uma maneira bastante direta quando um determinado campo de dados é especificado. Por exemplo, use os comandos cut e wc para contar o comprimento máximo do segundo campo no arquivo:

cut -d, -f2 test.csv | wc -L  

Mas como posso pegar o comando e fazer o loop para todos os campos de dados e, em seguida, gerar a saída?

    
por QY Luo 15.09.2014 / 18:44

2 respostas

2

Se eu entendi sua pergunta corretamente, isso fará o que você deseja:

awk -F, 'NR!=1 { if (max_NF < NF) max_NF = NF;
                 for (i=1; i<=NF; i++) if (max[i] < length($i)) max[i] = length($i) }
         END   { for (i=1; i<=max_NF; i++) printf "%-2d | %d\n", i, max[i] }'
    
por 15.09.2014 / 19:23
0

Eu não vejo seu link para o arquivo de exemplo, mas você pode fazer isso usando o comando awk. se pode especificar o que você pode ter e qual campo você precisa contar.

    awk '{ FS = "," } ; { if(NR!=1) gsub(/"/, "", $2) ; print NR "|" length($2) } ' test.csv

Você pode redirecionar essa saída para qualquer arquivo desejado.

    
por 15.09.2014 / 19:19