首页 > 解决方案 > 计算每个部分的数字实例的 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++;
}' 

我将如何确保我计算每个名字?

标签: for-loopawkwhile-loop

解决方案


您应该尝试使用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

推荐阅读