Estou tentando analisar um arquivo separado por vírgula (arquivo CSV). Imagine uma lista de livros e seus autores, a segunda coluna é o autor. Como o arquivo tem milhões de linhas (cerca de 133M), não posso fazer isso com Python ou Java (quer dizer, posso, mas demora muito), então decidi usar bash ou zsh (que é o interpretador instalado em o Mac).
Preciso contar quantos livros cada autor possui, ou seja, contar as ocorrências de cada valor único na segunda coluna.
#!/bin/zsh
awk -v FS="," 'NR > 1 {
author_id = $2;
count[$author_id]++;
}
END {
PROCINFO["sorted_in_place"] = 1;
for (author_id, count) in count; {
printf "%d, %d\n", author_id, count;
}
}' "~/list_of_books_per_author.csv" | sort -nrk2,2 | head -n 10
Eu continuo recebendo esse erro:
awk: syntax error at source line 7
context is
for >>> (author_id, <<<
awk: illegal statement at source line 7
awk: illegal statement at source line 7
Não estou realmente ciente do que estou fazendo de errado agora . Como você itera uma matriz associativa, quando deseja valores, chave e valor?