根据日期Grep特定元素的总量

Grep total amount of specific elements based on date

在 linux 中有没有一种方法可以在一个命令中过滤包含一堆数据的多个文件 而无需 编写脚本?

对于这个例子,我想知道按日期出现了多少男性。问题还在于特定日期(1 月 3 日)出现在 2 个单独的文件中:

文件 1

Jan  1 john male=yes
Jan  1 james male=yes
Jan  2 kate male=no 
Jan  3 jonathan male=yes

文件 2

Jan  3 alice male=no
Jan  4 john male=yes 
Jan  4 jonathan male=yes
Jan  4 alice male=no

我想要所有文件中每个日期的男性总数。如果特定日期没有男性,则不会给出输出。

Jan  1 2 
Jan  3 1
Jan  4 2

我能想到的唯一方法是计算给定特定日期的男性性别总数,但这不会有效,因为在现实世界的示例中可能会有更多文件并且手动输入所有日期将是浪费时间。任何帮助将不胜感激,谢谢!

localhost:~# cat file1 file2 | grep "male=yes" | grep "Jan  1" | wc -l
2
grep -h 'male=yes' file? | \
    cut -c-6 | \
    awk '{c[[=10=]] += 1} END {for(i in c){printf "%6s %4d\n", i, c[i]}}'

grep 将打印男性行,cut 将删除除前 6 个字符(日期)以外的所有内容,awk 将计算每个日期并打印输出每个日期和计数器最后。

给定您的文件,输出将是:

Jan  1    2
Jan  3    1
Jan  4    2