繁体   English   中英

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

[英]How to analyze frequency of characters in a text file

我有一个包含大约 2500 万行的文本文件。 各行数据类似如下:

12ertwrtrdfger
897
第545章345
968587563453 345
897 53647565344553


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

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

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

uniq -c计算每个字符串的频率。

继续| sort -nbr | sort -nbr of 你想先按最频繁排序。

继续| head -10 | 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

但是,有一个“错误”。 当整行少于5个字符时,短行将被发送到output。

您可以尝试下面的 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)

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM