Grep удаление линий, которые похожи на полу?

Я читаю такой файл:

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 строки будут обрезаны до одной строки?

4 голоса | спросил Jason 13 PMpSun, 13 Apr 2014 22:34:29 +040034Sunday 2014, 22:34:29

2 ответа


0

Вы можете использовать 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"
ответил anubhava 13 PMpSun, 13 Apr 2014 22:40:08 +040040Sunday 2014, 22:40:08
0

Вы можете сделать:

awk '/Ruby/{print $1}' file | sort -u

Или вы можете использовать grep + cut, чтобы получить первый столбец, как предлагается в комментарии.

ответил P.P. 13 PMpSun, 13 Apr 2014 22:39:42 +040039Sunday 2014, 22:39:42

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132