我正在使用 gawk 浏览一个大型文本语料库(大约 3-4GB,电子书汇编),以便打印出至少出现 3 次的 3 个单词的每个关联,以生成语言统计数据。这是代码:
file.awk 的内容:
BEGIN { RS="[^[:alnum:]]+" }
{ w1 = w2; w2 = w3; w3 = $0 }
NR > 2 { count[tolower(w1 " " w2 " " w3)]++ }
END {
for (phrase in count) {
if (count[phrase] >= 3) {
print phrase, count[phrase]
}
}
}
命令:gawk -f file.awk mytxtfile > 输出
它适用于小文件(几百 MB),但我无法让它适用于大于 1GB 的文件:gawk 在不到一分钟的时间内吃掉我所有的 RAM(8GB),然后开始吃掉我的交换和整个系统最终冻结。
你知道我如何优化代码,即使最终需要更长的时间吗?
非常感谢