我正在读一个这样的文件:
cat access_logs | grep Ruby
确定哪些IP正在访问我的某个文件.它返回一个巨大的列表.我想删除半重复项,即这两行在技术上是相同的 – 除了具有不同的时间/日期戳.在一个包含数千次重复的大量列表中 – 有没有办法只获得唯一的IP地址?
1.2.3.4 - - [13/Apr/2014:14:20:17 -0400] "GET /color.txt HTTP/1.1" 404 207 "-" "Ruby" 1.2.3.4 - - [13/Apr/2014:14:20:38 -0400] "GET /color.txt HTTP/1.1" 404 207 "-" "Ruby" 1.2.3.4 - - [13/Apr/2014:15:20:17 -0400] "GET /color.txt HTTP/1.1" 404 207 "-" "Ruby" 1.2.3.4 - - [13/Apr/2014:15:20:38 -0400] "GET /color.txt HTTP/1.1" 404 207 "-" "Ruby"
那么例如那4行会被修剪成只有一行吗?
解决方法
你可以使用awk:
awk '/Ruby/ && !seen[$1]++' access_logs
即使给定IP的时间戳不同,这也只会打印每个IP地址的第一行.
对于您的输入,它打印:
1.2.3.4 - - [13/Apr/2014:14:20:17 -0400] "GET /color.txt HTTP/1.1" 404 207 "-" "Ruby"