unix - 使用 awk 计算组的主题实例
问题描述
我有一个超过 20gb 的文件(这么多行。)这些行看起来像这样:
group1 motifA
group1 motifD
group1 motifD
group1 motifRalph
group1 motifA
group2 motifDenzel
group2 motifRodger
group2 motifHector
group2 motifDenzel
group2 motifA
group2 motifXYZ
group2 motifA
group2 motifDenzel
group3 motifHector
group3 motifRalph
group4 motifA
...
group10389
我想创建一个摘要文件,列出每个组中出现的主题以及出现的次数。例如:
group1 motifA 2
group1 motifD 2
group1 motifRalph 1
group2 motifDenzel 3
group2 motifRodger 1
group2 motifHector 1
但我想要所有的主题。我知道使用 awk 您可以使用 count 例如:
awk '{count[$1]++} END
但是如何为我描述的组计数呢?非常感激!
解决方案
请您尝试以下操作。在这里读取 Input_file 2 次。
awk 'FNR==NR{a[$1,$2]++;next} a[$1,$2]{print $0,a[$1,$2];delete a[$1,$2]}' Input_file Input_file
第二种方法:通过仅读取 1 次 Input_file(根据 Tiw 在评论部分的评论,可能需要一些时间,因为整个 Input_file 正在加载到内存中左右)。
awk '!a[$1 FS $2]++{b[++count]=$1 OFS $2;} {c[$1 FS $2]++} END{for(i=1;i<=count;i++){print b[i],c[b[i]]}}' Input_file
推荐阅读
- discord - 为什么我的会员加入代码无效?
- java - 使用通用 JSON 的属性生成 XML
- visual-studio - 如何防止 React 构建和 npm 将文件添加到项目中?
- vba - 使用 On Error Resume Next 的错误处理未按预期工作
- python - 两种方式/在字典 Python 上反向搜索
- node.js - 什么时候使用自定义连接工厂?
- python-3.x - 替换字符串中每个偶数 x2 次出现的子字符串
- spring-boot - 如何在 Spring Boot OAuth2 中将身份验证转换为 Jwt 对象?
- reactjs - React - 调用 api 并导出值
- postgresql - 更快地找到不同的值