目录下有每次点名的记录文件,如下
每个文件里有每次点名的出勤记录
刚学linux对shell编程完全不会,求帮!
[root@aliyun_ecs linux2021Spring]# cd /home/buyhorse/records/linux2021Spring
[root@aliyun_ecs linux2021Spring]# ls
202104221015 202104221016
[root@aliyun_ecs linux2021Spring]# cat 202104221015
10:
USER TTY FROM LOGIN
buyhorse
stu3203
stu3204
stu3205
stu3203
stu3207
stu3207
stu3207
stu3203
[root@aliyun_ecs linux2021Spring]# cat 202104221016
10:
USER TTY FROM LOGIN
buyhorse
stu3203
stu3204
stu3205
stu3203
stu3207
stu3207
stu3207
stu3203
[root@aliyun_ecs linux2021Spring]# awk '{if(!NF ||/^#/ ||/^USER/ || /^[0-9]/){next}{print $1}}' * |sort -r|uniq -c|awk -F' ' -v 'OFS=:' '{ swap = $2; $2 = $1; $1 = swap; print }'
stu3207:6
stu3205:2
stu3204:2
stu3203:6
buyhorse:2
cd /home/buyhorse/records/linux2021Spring #进入对应目录 保证目录只有你要统计的如过不是 * 替换成能匹配你所有要统计的文件如2021*
awk '{if(!NF ||/^#/ ||/^USER/ || /^[0-9]/){next}{print $1}}' * |sort -r|uniq -c|awk -F' ' -v 'OFS=:' '{ swap = $2; $2 = $1; $1 = swap; print }'
#{if(!NF ||/^#/ ||/^USER/ || /^[0-9]/){next}{print $1}}' * 是从当前目录读取数据,并跳过空行 首行是USER和数字的
#sort -r是反向排序,一定先排序再去重复
#uniq -c去重复再统计重复的数量,不过结果是数字在前
#awk -F' ' -v 'OFS=:' '{ swap = $2; $2 = $1; $1 = swap; print }' 按用户:数量调换顺序。
看你规则你的帐号应该就是buyhorse把,sort -r 就是反序,学生是stuxxx 反序后是排在buyhorse前.如果不是可以再来一次匹配 匹配到的值做为变量,最后输出 awk '{if(/buyhor/){temp =$NF ;{next}}{print}}END{print temp}'
[root@aliyun_ecs linux2021Spring]# cd /home/buyhorse/records/linux2021Spring
[root@aliyun_ecs linux2021Spring]# awk '{if(!NF ||/^#/ ||/^USER/ || /^[0-9]/){next}{print $1}}' * |sort |uniq -c|awk '{print $2":"$1}'
buyhorse:2
stu3201:1
stu3203:6
stu3204:2
stu3205:2
stu3207:6
[root@aliyun_ecs linux2021Spring]# awk '{if(!NF ||/^#/ ||/^USER/ || /^[0-9]/){next}{print $1}}' * |sort |uniq -c|awk '{print $2":"$1}'|awk '{if(/buyhor/){temp =$NF ;{next}}{print}}END{print temp}'
stu3201:1
stu3203:6
stu3204:2
stu3205:2
stu3207:6
buyhorse:2
[root@aliyun_ecs linux2021Spring]#
如果对你有帮助 ,请帮忙点个采纳。你的认可是我们互助的动力。( 点击我回答右上角的【采纳】按钮 )