gpt4 book ai didi

linux - 使用 Awk 输入大文本文件并输出最常见的单词文本文件?

转载 作者:太空宇宙 更新时间:2023-11-04 10:39:33 25 4
gpt4 key购买 nike

我不是很精通 Linux,而且我有一个非常大的文本文件(几个 Gigs),我想找到最常见的单词(比如前 50 个)以及每个单词出现的次数,并将这些数字输出到文本文件,如下所示:

2500 and

我如何使用 Awk 执行此操作? (它并不一定要使用 Awk,但我在 Windows 7 上使用 Cygwin,我不确定还有什么其他东西可以用来做这类事情)。

我看过这个问题: https://unix.stackexchange.com/questions/41479/find-n-most-frequent-words-in-a-file

尽管如前所述,我对 Linux 和管道等不太熟悉,如果有人能解释每个命令的作用,我将不胜感激。

最佳答案

这完全取决于您对“单词”的定义,但如果我们假设它是不区分大小写的字母字符的连续序列,那么使用 GNU awk(这是您使用 cygwin 获得的 awk)的一种方法是:

awk -v RS='[[:alpha:]]+' '
RT { cnt[tolower(RT)]++ }
END {
PROCINFO["sorted_in"] = "@val_num_desc"
for (word in cnt) {
print cnt[word], word
if (++c == 50) {
exit
}
}
}
' file

在@dawgs' Tale of Two Cities 上运行时例如上面的输出:

8230 the
5067 and
4140 of
3651 to
3017 a
2660 in
...
440 when
440 been
428 which
399 them
385 what

想要排除 1 个或 2 个字符的填充词,如 oftoain多于?简单:

awk -v RS='[[:alpha:]]+' '
length(RT)>2 { cnt[tolower(RT)]++ }
END {
PROCINFO["sorted_in"] = "@val_num_desc"
for (word in cnt) {
print cnt[word], word
if (++c == 50) {
exit
}
}
}
' pg98.txt
8230 the
5067 and
2011 his
1956 that
1774 was
1497 you
1358 with
....

对于其他 awk,它是一个 while(match()) substr() 循环,输出通过管道传输到 sort -n 然后是 head.

如果这不是您想要的,请编辑您的问题以包含一些示例输入和预期输出,以便我们可以帮助您。

关于linux - 使用 Awk 输入大文本文件并输出最常见的单词文本文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35750431/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com