我在 Linux 上的 bash
脚本有问题。
我的输入是这样的:
input
Karydhs y n y y y n n y n n n y n y n
Markopoulos y y n n n y n y n y y n n n y
name3 y n y n n n n n y y n y n y n
等...
which y=yes and n=no 那是投票的结果......现在我想用 awk
显示每个人的名字和总的赞成票(名字)以及获胜者(获得最多 y),有什么想法吗?
我是这样做的:
awk '{count=0 for (I=1;i<=15;i++) if (a[I]="y") count++} {print $1,count}' filename
最佳答案
这是一个快速的(不需要排序,没有显式的“for”循环),考虑到连接可能性的一次性解决方案:
awk 'NF==0{next}
{name=$1; $1=""; gsub(/[^y]/,"",$0); l=length($0);
print name, l;
if (mx=="" || mx < l) { mx=l; tie=""; winner=name; }
else if (mx == l) {
tie = 1; winner = winner", "name;
}
}
END {fmt = tie ? "The winners have won %d votes each:\n" :
"The winner has won %d votes:\n";
printf fmt, mx;
print winner;
}'
输出:
Karydhs 7
Markopoulos 7
name3 6
The winners have won 7 votes each:
Karydhs, Markopoulos
注意:上面的程序是为了可读性而提供的,但接受 GNU awk 显示的换行符。某些 awk 不允许拆分三元条件。
关于linux - Awk:如何跨列计算字符串的出现次数并找到跨行的最大值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34866683/