for-loop - 计算每个部分的数字实例的 AWK 脚本
问题描述
也许 AWK 不是我尝试使用它的任务的最佳编码语言。我熟悉 Python,但我只是喜欢在这种情况下使用 AWK。这是我的编码问题。我有一个看起来像这样的文件:
name1 0
name1 1
name1 0
name1 1
name2 0
name2 0
name3 1
name3 1
name3 1
name3 0
我正在尝试计算每个不同名称的 0 和 1 的数量(它们最多可达 3000 左右。)例如,我想在一个新文件中打印以下内容
name1 2 2 #There are 2 ones and 2 zeros
name2 0 2 #There are 0 ones, and 2 zeros
name3 1 3 #There are 1 one, and 3 zeros
计算 0 和 1 是显而易见的,我会使用一个简单的 if/else 语句
awk '{
if (variable == false)
while (
if ($2 == 0)
a++;
else
b++;
}'
我将如何确保我计算每个名字?
解决方案
您应该尝试使用awk
数组:
awk '{
m[$1,$2]++;a[$1]
}
END{
for(i in a)
print i, (m[i,"1"] ? m[i,"1"] : "0") , (m[i,"0"] ? m[i,"0"] : 0)
}' names
- 第一个数组
m
用于保存字段+编号,以备后用。 - 第二个是数组
a
,就是要记住第一个字段。 (m[i"1"] ? m[i"1"] : "0") , (m[i"0"] ? m[i"0"] : 0)
是三元运算符,在没有任何东西的情况下使用m
。
推荐阅读
- regex - 使用正则表达式将字符串分成三部分
- automation - Microsoft Flow - 无法评估模板语言表达式,因为属性“位置”不存在
- nunit - 如何使用 --where for nunit 运行测试用例的子集
- python - 将数据插入到 grakn 模式
- sharepoint-2013 - 使用 SharePoint REST API 将值设置为多值托管元数据字段类型时出错
- python - 为 django 应用程序中的所有用户启用日志条目
- ios - 如何在 Swift 中裁剪图像?
- r - 如何在 R 中为 y_continuous 设置 ylim?
- filter - 过滤仅符合 SAS Enterprise Guide 趋势的数据
- android-fragments - MVVM 交叉异常:无法创建片段。使用 Android Support Fragments 时使用 MvxAppCompatViewPresenter