Linux 从用户代理字符串确定哪个浏览器发出请求

Linux 从用户代理字符串确定哪个浏览器发出请求,linux,batch-file,awk,gnuplot,logfile,Linux,Batch File,Awk,Gnuplot,Logfile,我正在尝试编写一个批处理文件,用于从日志文件中读取和提取用户代理,我可以使用以下代码执行此操作,但我需要给出发出请求的浏览器的数字计数,并使用gnu plot,绘制一个每个浏览器请求数的条形图。我对浏览器的请求有点纠结。如果您能提供一些帮助或指导,我将不胜感激 干杯 #!/bin/bash # All we're doing here is extracting the user agent field from the log file and 'piping' it through s

我正在尝试编写一个批处理文件,用于从日志文件中读取和提取用户代理,我可以使用以下代码执行此操作,但我需要给出发出请求的浏览器的数字计数,并使用gnu plot,绘制一个每个浏览器请求数的条形图。我对浏览器的请求有点纠结。如果您能提供一些帮助或指导,我将不胜感激

干杯

 #!/bin/bash

 # All we're doing here is extracting the user agent field from the log file and 'piping' it through some other commands. The first sort is to # enable uniq to properly identify and count unique user agents. The final sort orders the result by number and name (both descending).

 awk -F\" '{print $6}' access.log | sort | uniq -c | sort -fr > extracteduseragents.txt

要获得更友好的浏览器名称,您可以使用,例如与来自的
browscap.csv
文件一起使用

然后您可以使用如下脚本
sanitize_ua.py

#!/usr/bin/env python
import sys
from pybrowscap.loader.csv import load_file

browscap = load_file('browscap.csv')

for ua in sys.stdin:
    browser = browscap.search(ua)
    if browser:
        print "'{} {}'".format(browser.name(), browser.version())
并从命令行运行,如

awk -F\" '{print $6}' access.log | sort | python sanitize_ua.py | uniq -c | sort -fr

当然,在
uniq
之前搜索所有用户代理效率很低,但它应该显示工作原理。当然,您也可以编写一个python脚本来完成所有的处理。

您到底在坚持什么?获取该输出并将其输入gnuplot?@EtanReisner谢谢您的回复,在提取用户代理字符串(由上述代码完成)后,我想确定是哪个浏览器发出了请求?用户代理字符串是浏览器标识符。如果需要,您可以手动将这些字符串映射到更友好的名称,但仅此而已。在网页上进行UA嗅探是一种强烈反对的做法,这是有原因的。