awk -выбор текста

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

Grih65kop
Сообщения: 145

awk -выбор текста

Сообщение Grih65kop »

Есть строка

Код: Выделить всё

11.11.11.11 - - [13/Jul/2012:10:44:31 +0400] /1111/1.php


Нужно получить из нее:
13/Jul/2012 11.11.11.11 /1111/1.php

С

Код: Выделить всё

11.11.11.11 /1111/1.php

проблем нету.

Делаю так:

Код: Выделить всё

awk -F\  '{print $1, $6}' 1


Но вот как выбрать 13/Jul/2012 при помощи awk в данной команде не могу представить. Подскажите, пожалуйста, решение.
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: awk -выбор текста

Сообщение sash-kan »

Grih65kop писал(а):
13.07.2012 21:26
как выбрать 13/Jul/2012 при помощи awk в данной команде не могу представить
примерно как на sed-е (только на awk):
$ echo '11.11.11.11 - - [13/Jul/2012:10:44:31 +0400] /1111/1.php' | sed -r 's/^([^ ]*) .*\[([^:]*).*\]/\2 \1/'
13/Jul/2012 11.11.11.11 /1111/1.php
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Grih65kop
Сообщения: 145

Re: awk -выбор текста

Сообщение Grih65kop »

Спасибо за ответ, но у меня проблема именно в том как реализовать, впихнуть регулярное выражение в мой awk сценарий.
Спасибо сказали:
Grih65kop
Сообщения: 145

Re: awk -выбор текста

Сообщение Grih65kop »

Пожалуй мне с самого начала нужно было выложить полную исходную строку:

Код: Выделить всё

разные строки
11.11.11.11 - - [13/Jul/2012:10:44:31 +0400] "GET /1111/1.php HTTP/1.1" 401 21 "-" "Opera/9.80 (X11; Linux i686; U; en) Presto/2.10.289 Version/12.00" "-"
разные строки


Из-за отсутствие более удачного варианта сделал такой костыл:

grep '\" 401\ ' 1 | sed 's/\:/\ /;s/\[/\ /' | awk -F\ '{print $4,$1,$8}'

Выбираю сперва строку с кодом 401 и заменяю в ней символы : и [ на пробел, а затем уже собираю необходимую мне строку из первого поста.
sed и awk вместе, но точно знаю что можно решить все одним инструментом.
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: awk -выбор текста

Сообщение sash-kan »

Grih65kop писал(а):
14.07.2012 02:15
но точно знаю что можно решить все одним инструментом
да, конечно:

Код: Выделить всё

$ cat file
разные строки
11.11.11.11 - - [13/Jul/2012:10:44:31 +0400] "GET /1111/1.php HTTP/1.1" 401 21 "-" "Opera/9.80 (X11; Linux i686; U; en) Presto/2.10.289 Version/12.00" "-"
разные строки
$ cat file | sed -rn '/" 401 /{s/^([^ ]*) .*\[([^:]*).*\] "GET ([^ ]*) .*/\2 \1 \3/;p}'
13/Jul/2012 11.11.11.11 /1111/1.php
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: awk -выбор текста

Сообщение SLEDopit »

sash-kan, откуда такая нелюбовь к awk? Он же тоже всё умеет (:

Код: Выделить всё

echo '11.11.11.11 - - [13/Jul/2012:10:44:31 +0400] "GET /1111/1.php HTTP/1.1" 401 21 "-" "Opera/9.80 (X11; Linux i686; U; en) Presto/2.10.289 Version/12.00" "-"' | \
awk '/^[0-9]/{sub(/:.*/, "", $4);$4=substr($4,2);print $4,$1,$7}'
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: awk -выбор текста

Сообщение sash-kan »

SLEDopit писал(а):
17.07.2012 11:58
откуда такая нелюбовь к awk?
чтоб не любить, надо для начала хоть man прочитать, а я его не читал…
SLEDopit писал(а):
17.07.2012 11:58
Он же тоже всё умеет
ни минуты не сомневался·
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
infra_hdc
Сообщения: 376
ОС: GNU/Linux

Re: awk -выбор текста

Сообщение infra_hdc »

Сделайте так:

Код: Выделить всё

awk '{ n4=$4; sub(/\[/, "", n4); sub(/:[0-9]+:[0-9]+:[0-9]+/, "", n4); print n4 " "  $1 " " $6 }'
Спасибо сказали: