我想知道有多少用户在过去30分钟内使用我的代理访问过google.com。
awk -v bt=$(date "+%s" -d "30 minutes ago") '($1 > bt) && $4~/google.com/ {printf("%s|%s|%s|%s\n", strftime("%F %T",$1), $2 , $3, $4)} ' access.log
日志看起来像这样
2017-02-19 12:09:44|test@gmail.com|200|https://google.com/
2017-02-19 12:10:23|test@gmail.com|200|https://google.com/
现在我可以轻松计算记录数
awk -v bt=$(date "+%s" -d "30 minutes ago") '($1 > bt) && $4~/google.com/ {printf("%s|%s|%s|%s\n", strftime("%F %T",$1), $2 , $3, $4)} ' access.log | wc -l
输出为2。
如何修改命令以仅显示包含唯一电子邮件的记录。在上述情况下,输出应为1.
答案 0 :(得分:1)
列出结果
HTML: <p><img class="customBorder" src="http://lorempixel.com/640/480/" /></p>
CSS: img.customBorder {
border-style: solid;
border-width: 5em;
-moz-border-image: url(http://despeaux.consulting/larryhooke/wp-content/uploads/sites/14/2017/02/imageBorder-draft1-black.png) 30 stretch;
-webkit-border-image: url(http://despeaux.consulting/larryhooke/wp-content/uploads/sites/14/2017/02/imageBorder-draft1-black.png) 30 stretch;
-o-border-image: url(http://despeaux.consulting/larryhooke/wp-content/uploads/sites/14/2017/02/imageBorder-draft1-black.png) 30 stretch;
border-image: url(http://despeaux.consulting/larryhooke/wp-content/uploads/sites/14/2017/02/imageBorder-draft1-black.png) 72 stretch;
}
获得计数
awk -v FS='|' -v bt="$(date +'%Y-%m-%d %H:%M:%S' -d '30 minutes ago')" '
($1 > bt) && $4~/google.com/ && !seen[$2]++
' access.log
进行测试
awk -v FS='|' -v bt="$(date +'%Y-%m-%d %H:%M:%S' -d '30 minutes ago')" '
($1 > bt) && $4~/google.com/ && !seen[$2]++{ count++ }
END{ print count+0 }
' access.log
输出 - 1查看结果
# Current datetime of my system
$ date +'%Y-%m-%d %H:%M:%S'
2017-02-26 00:06:19
# 30 minutes ago what was datetime
$ date +'%Y-%m-%d %H:%M:%S' -d '30 minutes ago'
2017-02-25 23:36:20
# Input file, I modified datetime to check command
$ cat f
2017-02-25 23:10:44|test@gmail.com|200|https://google.com/
2017-02-25 23:45:23|test@gmail.com|200|https://google.com/
输出 - 2看计数
$ awk -v FS='|' -v bt="$(date +'%Y-%m-%d %H:%M:%S' -d '30 minutes ago')" '
($1 > bt) && $4~/google.com/ && !seen[$2]++
' f
2017-02-25 23:45:23|test@gmail.com|200|https://google.com/
答案 1 :(得分:0)
您可以使用sort
选择唯一的电子邮件帐户。
答案 2 :(得分:0)
只需将日志传送到
即可sort -u -t "|" -k "2"
所以你会有类似的东西:
awk -v bt=$(date "+%s" -d "30 minutes ago") '($1 > bt) && $4~/google.com/ {printf("%s|%s|%s|%s\n", strftime("%F %T",$1), $2 , $3, $4)} ' access.log | sort -u -t "|" -k "2"