如何分析文本文件中字符的频率



我有一个文本文件,其中包含大约2500万行。线路上的数据如下所示:

12ertwrtrdfger
897ertertert
545ret3w2trewt345
968587563453345
89753647565344553


我想分析最常见的前缀和后缀。在上面的例子中,你可以看到两行以897开头,两行以345结尾,我想看看哪个前缀/后缀最常见。我还想得到条形图/饼图的结果。任何数据分析程序都可以进行这种分析?

您可以尝试下面的python代码。它运行了1.5分钟,文件大小为1GB,符合您的描述。它有922180个不同的前缀和891532个不同的后缀。

pre = {}
suf = {}
with open('input.txt', 'r') as f:
for line in f:
p, s = line[:3], line[-4:-1]
pre[p] = pre.get(p, 0) + 1
suf[s] = suf.get(s, 0) + 1
df_pre = pd.DataFrame([[e[0], e[1]] for e in pre.items()])
df_suf = pd.DataFrame([[e[0], e[1]] for e in suf.items()])
df_pre.sort_values([1], ascending=False)
df_suf.sort_values([1], ascending=False)

文件生成:字符串printables中有98个不同的字符。该文件包含2500万行,每行大约40个字符。

sed ... <file | sort | uniq -c

需要指定args来提取前3个或最后3个字符。

uniq -c对每个字符串的频率进行计数。

首先处理您要按最频繁排序的| sort -nbr

处理| head -10,只查看到10。

然后输入LibreCalc以获得带有图形的电子表格。

sed -E '/^(.....)(.*)$/1/' <abc.txt | sort | uniq -c >pre5.txt

最后5个,使用不同的方式指定5个字符:

sed -E '/^(.*)(.{5})$/2/' <abc.txt | sort | uniq -c >suf5.txt

然而;bug";。当整行少于5个字符时,短行将发送到输出。

我已经用下面的代码解决了我的问题:

sed abc.txt <abc.txt | cut -c 1-5 | sort | uniq -cd | sort -nbr > pre5.txt

相关内容

  • 没有找到相关文章

最新更新