Задать вопрос

Как с помощью grep и сut получить ip и определённую подстроку из строки?

Из лог файла веб-сервера нужно получить пары вида IP: __utma. Строки в файле стандартные, только через "|" сохраняются куки.

80.247.101.110 - - [16/Aug/2013:06:58:23 +0400] "POST /edit HTTP/1.1" 404 327 "http://site.ru/" "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 YaBrowser/1.7.1364.17262 Safari/537.22" "-" | "__utma=230214667.2058679839.1371519930.1376615440.1376617932.52; __utmc=230214667; __utmz=230214667.1371519930.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)"
  • Вопрос задан
  • 6097 просмотров
Подписаться 2 Оценить 3 комментария
Решения вопроса 1
Amet13
@Amet13
Раз пошла такая пьянка, то:
cat test.log | awk '{print $1,":",substr($0, index($0,"__utma"),64)}' | sed 's/ : __utma=/: /' | sed 's/;//'

Надеюсь я вас правильно понял?
На выходе:
80.247.101.110: 230214667.2058679839.1371519930.1376615440.1376617932.52
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
3vi1_0n3
@3vi1_0n3
Если можно awk, то так:
cat ./data.txt | awk '{print $1,":",substr($0, index($0,"__utma"),64)}'
Ответ написан
@tgz
Вот как-то так можно:

for line in $(cat log);
do
    ip=$(echo $line | grep -o "^[0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+")
    utma=$(echo $line |grep -o "__utma=\([0-9]\+\.\)\+[0-9]\+" | cut -d '=' -f2 )
    echo -en "$ip $utma\n"
done
Ответ написан
Комментировать
baragoon
@baragoon
Люблю попяченое щачло
cat log | awk -F"-" '{print $1,$4}' | awk '{print $1":",$4}' | sed 's/"__utma=//g' | sed 's/;$//'
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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