计算文件中每行的某个单词的数字

时间:2014-04-17 03:08:46

标签: bash awk grep

我的文件看起来像

旧数据

alireza,mahdi,alireza,mohammad
alireza,olivia,amireza,hasan
alireza,alireza,alireza,alireza

新数据

0.54:30.36:N    0.54:32.31:N     0.54:30.36:Y
0.54:30.36:Y    0.54:32.31:N     0.54:30.36:Y
0.54:30.36:N    0.54:32.31:N     0.54:30.36:Y
0.54:30.36:N    0.54:32.31:N     0.54:30.36:N

我想数一数说," Y"每行,

所以输出将是

1
2
1
0

所以我可以像'" grep -w':Y' MYFILE"但后来我不知道怎么算!从那以后......

**更新 我很抱歉改变数据和可能的模式。我想呈现一种简单易懂的格式,但我没有成功。我再次道歉。

2 个答案:

答案 0 :(得分:5)

这是一种惯用的awk方式来打印每行上RE的次数:

$ awk '{print gsub(/:Y/,"")}' file
1
2
1
0

答案 1 :(得分:0)

对于您的新数据,您只需更改字段分隔符:

awk -F'[ :.]' '{for(i=1;i<=NF;i++) {if ($i=="Y") c++;}}{print c; c=0}' inputfile

或使用模式匹配:

awk '{for(i=1;i<=NF;i++) {if ($i~/:Y$/) c++;}}{print c; c=0}' inputfile

两者都会产生:

1
2
1
0

用于输入。


旧答案:您可以使用awk

awk -F, '{for(i=1;i<=NF;i++) {if ($i=="alireza") c++;}}{print c; c=0}' inputfile

对于您的样本输入,它会产生:

2
1
4
0