如何使用awk等命令从Nginx日志提取IP及含社交平台的Referer
实现命令
直接运行以下awk命令即可一步完成筛选、字段提取和输出:
awk -F '"' '$4 ~ /facebook|instagram|twitter/ { split($1, arr, " "); print arr[1], $4 }' access.log
命令逻辑说明
- 以双引号
"作为全局字段分隔符:标准Nginx combined日志格式下,所有被双引号包裹的内容会被独立拆分,Referer是第二个被双引号包裹的内容,对应字段序号为$4,避免请求路径带空格导致的字段偏移问题,你之前单独提取Referer的命令字段序号有误就是这个原因。 - 筛选逻辑:
$4 ~ /facebook|instagram|twitter/会仅保留Referer包含指定社交平台域名的记录。 - 字段提取:对双引号分隔后的第一个字段
$1(即日志行开头到请求行前的部分)按空格拆分,取拆分后的第一个元素即为客户端IP。 - 输出格式:直接输出IP和对应Referer,完全匹配你需要的格式。
可选扩展
如果需要匹配时忽略域名大小写,或者对输出结果去重,可以调整为:
# 大小写不敏感匹配 + 结果去重 awk -F '"' 'BEGIN{IGNORECASE=1} $4 ~ /facebook|instagram|twitter/ { split($1, arr, " "); print arr[1], $4 }' access.log | sort | uniq
内容的提问来源于stack exchange,提问作者jazzfriends
相关产品推荐
相关产品推荐

