-2

我有空间分隔的大列文本文件

Name  subject       Result
John  maths         pass
John  science       fail
John  history       pass
John  geography     pass
Jack  maths         pass
jack  history       fail
kelly science       pass
kelly history       pass

我想计算每个名字(这是一个很长的名字列表,每个名字应该只出现一次),有多少人通过了。例如。对于约翰,他通过了 3,同样,对于杰克,他通过了 1。它应该将结果打印为

Name  Passcount
John   3
Jack   1
Kelly  2

任何人都可以帮助使用 awk 或 perl 脚本。提前致谢

4

1 回答 1

1

你可以试试这样的 -

awk '
BEGIN{ print "Name\tPasscount"} 
NR>1{if ($3=="pass") a[$1]++}
END{ for (x in a) print x"\t"a[x]}' file

测试:

$ cat file
Name  subject       Result
John  maths         pass
John  science       fail
John  history       pass
John  geography     pass
Jack  maths         pass
jack  history       fail
kelly science       pass
kelly history       pass

$ awk 'BEGIN{ print "Name\tPasscount"} NR>1{if ($3=="pass") a[$1]++}END{ for (x in a) print x"\t"a[x]}' file
Name    Passcount
Jack    1
kelly   2
John    3
于 2012-06-06T20:33:40.337 回答