下午好! 我正在尝试解析一个由逗号分隔的文件(CSV 文件)。想象一下书籍及其作者的列表,第二列是作者。由于该文件有数百万行(大约 133M),我无法使用 Python 或 Java 执行此操作(我的意思是,我可以,但需要太长时间),所以我决定使用 bash 或 zsh (这是安装在Mac)。
我需要计算每个作者有多少本书,这意味着,计算第二列中每个唯一值的出现次数。
#!/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
我不断收到此错误:
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
我真的不知道我现在做错了什么。当您需要值、键和值时,如何迭代关联数组?
您尝试循环关联数组时使用了完全错误的语法。你想要
for author_id in count {
printf "%d, %d\n", count[author_id], author_id;
}
另请注意左大括号之前不应有分号。