Я хочу проанализировать файлы журнала, мне нужно получить только последний IP-адрес из одного или нескольких, разделенных запятой в начале строки:
Вот так выглядят линии:
80.250.5.1 - - [26/Oct/2010:13:10:14 +0200] ...
80.250.5.1, 80.250.5.2 somethingA - [26/Oct/2010:13:10:14 +0200] ...
80.250.5.1, 80.250.5.2, 80.250.5.3 - somethingB [26/Oct/2010:13:10:14 +0200] ...
Мне нужно получить:
80.250.5.1 - - [26/Oct/2010:13:10:14 +0200] ...
80.250.5.2 somethingA - [26/Oct/2010:13:10:14 +0200] ...
80.250.5.3 - somethingB [26/Oct/2010:13:10:14 +0200] ...
Примечание: В столбцах «что-то» и «что-то» никогда не бывает запятой, это моя помощь. В следующих столбцах может быть больше запятых после [date].
Я попытался протестировать несколько первых столбцов и удалить их, если в них есть запятая, но проблема в том, что иногда там более 10 IP-адресов.
Это работает для 2 IP-адресов:
awk '{if ($1 ~ /,/) {$1=""}; if ($2 ~ /,/) {$2=""} }1'
Моя идея состоит в том, чтобы сделать что-то вроде «если перед запятой [есть запятая, удалите все перед запятой, иначе оставьте ее без изменений» ». К сожалению, мои навыки sed / awk недостаточно хороши для этого.
Большое спасибо за любую помощь.