Estou procurando uma ferramenta de linha de comando para calcular a soma dos valores em uma coluna especificada de um arquivo CSV. ( Atualização : o arquivo CSV pode ter campos entre aspas, portanto, uma solução simples apenas para quebrar um delimitador (',') não funciona.)
Dado o seguinte arquivo CSV de exemplo:
description A,description B,data 1, data 2
fruit,"banana,apple",3,17
veggie,cauliflower,7,18
animal,"fish,meat",9,22
Quero construir a soma, por exemplo, sobre a coluna data 1
com o resultado 19 .
Tentei usar o csvkit para isso, mas não fui muito longe. Existem outras ferramentas de garantia de comando especializadas nesta operação CSV?
Miller lida com CSVs citados nativamente, então o seguinte deve funcionar:
Coloquei seu CSV em um arquivo a.csv e fiz a soma da seguinte forma:
Isso está usando awk com uma vírgula como separador de campo. Se o campo nº 3 não corresponder aos dados*, somamos o valor ao total. Quando terminar, imprima "sum=" e o valor total. Este é um subconjunto da resposta do awk Processamento de dados tabulares .
Uma versão atualizada que usa FPAT para permitir as cotações:
O FPAT é uma expressão regular para gawk (que não funciona no estilo antigo do awk) que especifica como os campos são definidos. Nesse caso, existem duas expressões regulares,
([^,]*)
ou seja, zero ou mais ocorrências de zero ou mais caracteres que não sejam vírgula. the("[\"]+")
diz uma ou mais ocorrências de caracteres sem aspas, contidos entre aspas.Usando
csvsql
o conjunto de ferramentas csvkit, que foi o que você tentou usar originalmente:Isso insere os dados CSV
file
em uma tabela de banco de dados de mesmo nome, sem inferência de tipo (-I
). Em seguida, aplica a instrução SQLSUM("table 1")
nessa tabela para obter a soma dotable 1
campo.Como a saída conterá um cabeçalho, nós o removemos com uma chamada para
tail
.