1 (12.06.2011 06:14:31 отредактировано mycetophylax)

xxx@xxx:~$ cat /var/log/dhcpd.leases

lease 172.16.0.10 {
  starts 5 2011/06/10 20:55:50;
  ends 6 2011/06/11 02:55:50;
  cltt 5 2011/06/10 20:55:50;
  binding state active;
  next binding state free;
  hardware ethernet 00:xx:xx:a1:e5:b3;
  uid "\001\000\035\222\241\345\263";
  set ddns-rev-name = "10.0.16.172.in-addr.arpa.";
  set ddns-txt = "31327fdf3d5f7fcc5893825a585a73caf9";
  set ddns-fwd-name = "user-pk.example.com.";
  client-hostname "user-pk";
}

xxx@xxxr:~$ awk '$2 =="ethernet" || $2 =="ddns-fwd-name" {print}'  /var/log/dhcpd.leases | sed 's/;//g;s/."//g;s/=//g' | awk '{print $3}'

xx:xx:92:a1:e5:b3
user-pk.example.com
Ищу дополнительный заработок (удалёнка).
Пьянка без секса – признак алкоголизма.

2

Kettler пишет:

xxx@xxxr:~$ awk '$2 =="ethernet" || $2 =="ddns-fwd-name" {print}'  /var/log/dhcpd.leases | sed 's/;//g;s/."//g;s/=//g' | awk '{print $3}'

зачем мешать вместе sed и awk?

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

3

drBatty пишет:
Kettler пишет:

xxx@xxxr:~$ awk '$2 =="ethernet" || $2 =="ddns-fwd-name" {print}'  /var/log/dhcpd.leases | sed 's/;//g;s/."//g;s/=//g' | awk '{print $3}'

зачем мешать вместе sed и awk?

SED отлично подгоняет а AWK чётко шаблонизирует.

Ищу дополнительный заработок (удалёнка).
Пьянка без секса – признак алкоголизма.

4

Kettler пишет:

SED отлично подгоняет а AWK чётко шаблонизирует.

смешение языков отрицательно влияет как на производительность, так и на удобство обслуживания. Смешивать можно только очень разные ЯП, которые имеют весомые преимущества. Например bash+C. А мешать близкие по назначению ЯП - не имеет смысла.
в вашем случае более надёжно и более просто писать на чистой sed, awk в данном случае хуже.

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

5

Подскажи как сделать, чтобы выхлоп был не

xx:xx:92:a1:e5:b3
user-pk.example.com

а вот так

xx:xx:92:a1:e5:b3 user-pk.example.com
Ищу дополнительный заработок (удалёнка).
Пьянка без секса – признак алкоголизма.

6

http://linuxforum.ru/viewtopic.php?pid=186608#p186608

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

7

Забудьте, всё равно решил углубиться в perl.

Ищу дополнительный заработок (удалёнка).
Пьянка без секса – признак алкоголизма.

8

Kettler пишет:

Забудьте всё равно решил углубиться в perl.

перловка не нужна.
и кстати - зря. на перле и так программы кривые, а уж с вашим-то стилем...

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

9

drBatty пишет:
Kettler пишет:

Забудьте всё равно решил углубиться в perl.

перловка не нужна.
и кстати - зря. на перле и так программы кривые, а уж с вашим-то стилем...

угу, я ток учусь. Но perl надо изучить для мелких своих задач, чтоб не просить никого.
Для меня это всё так > тренировка. Я не собираюсь программировать на public, а так чисто для себя.
Для своих мелких задач думаю справиться.

Ищу дополнительный заработок (удалёнка).
Пьянка без секса – признак алкоголизма.

10

Kettler пишет:

Но perl надо изучить для мелких своих задач чтоб не просить не кого.

bash'а мало?

Kettler пишет:

Для меня это всё так > тренировка. Я не собираюсь программировать на public а так чисто для себя.
Для своих мелких задач думаю справиться.

ну дело ваше...

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

11

drBatty пишет:
Kettler пишет:

Но perl надо изучить для мелких своих задач чтоб не просить не кого.

bash'а мало?

Kettler пишет:

Для меня это всё так > тренировка. Я не собираюсь программировать на public а так чисто для себя.
Для своих мелких задач думаю справиться.

ну дело ваше...

забыл про bash спс.

Ищу дополнительный заработок (удалёнка).
Пьянка без секса – признак алкоголизма.

12

Kettler пишет:

забыл про bash спс.

дык в 95% достаточно баша. А в 5% остатка можно написать что-то вроде

X=`sed ...`

ну или там awk, хотя awk нафиг не нужно, ибо баш и считать умеет, и на поля разбивает.

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

13 (12.06.2011 14:11:53 отредактировано Kettler)

Зделал на perl.

#!/usr/bin/perl
open(InFile, "/var/log/dhcpd.leases") || die;
while ($line = <InFile>)
{

$lease = index ($line, "lease");
$hardware = index ($line, "hardware ethernet");
$ddns = index ($line, "ddns-fwd-name");

if ($lease == "-1"){
}
else
{
($namee, $ip) = split (" ", $line);
}

if ($hardware == "-1"){
}
else
{
($nameee, $ipp, $mak) = split (" ", $line);
chop ($mak);
}

if ($ddns == "-1"){
}
else
{
($nam, $ippp, $makk, $name) = split (" ", $line);
chop ($name);
$lenname = length ($name);
$n = substr ($name, "1" , $len-2);
}

if ($ip gt "")
{
        if ($mak gt "")
        {
        if ($lenname > "0")
        {
        print ($ip, " ", $mak, " ", $n, "\n");
        $lenname = "";
        $ip = "";
        $mak = "";
        $n = "";
        }
        }
}
}
close ( InFile );

вывод

172.16.0.10 xxx:xxx:xxx:a1:e5:b3 user-pk.example.com
172.16.0.56 xxx:xxx:xxx:27:a1:01 DIR-320.example.com

Или так

#!/usr/bin/perl
open(InFile, "/var/log/dhcpd.leases") || die;
while ($line = <InFile>)
{
($n1, $n2, $n3, $n4) = split (" ", $line);
        if ($n1 eq "lease")
        {
        $ip=$n2;
        }
        if ($n1 eq "starts")
        {
        $sdate=$n3;
        }
        if ($n1 eq "ends")
        {
        $edate=$n3;
        }
        if ($n1 eq "hardware")
        {
        $mak=$n3;
        }
        if ($n2 eq "ddns-fwd-name")
        {
        $name=$n4;
        }

if ($ip gt "" & $sdate gt "" & $edate gt "" & $mak gt "" & $name gt "")
{
chop ($mak);
chop ($name);
$lenname = length ($name);
$n = substr ($name, "1" , $len-2);
print $ip , " ", $sdate, " ", $edate, " ", $mak, " ", $n, " ", "\n";
$sdate="";
$edate="";
$mak="";
$name="";
$n="";
$lenname="";
}
}
close ( InFile );

172.16.0.10 2011/06/10 2011/06/11 xxx:xxx:xxx:a1:e5:b3 user-pk.example.com
172.16.0.56 2011/06/10 2011/06/11 xxx:xxx:xxx:27:a1:01 DIR-320.example.com
172.16.0.56 2011/06/11 2011/06/11 xxx:xxx:xxx:27:a1:01 DIR-320.example.com

Ищу дополнительный заработок (удалёнка).
Пьянка без секса – признак алкоголизма.

14

без седа я додумалсо только до такого

 Консоль:
awk ' {if ($2 ~ /ethernet/) { gsub(";","");  print $3} if($2 ~ /ddns-fwd-name/)  {{sub(/\.\"\;/,"")}; sub(/"/,"");  print $4}}' /home/mogul82/test/ww

не смог одним regEx описать что бы убрать
из строки
"user-pk.example.com.";
убрать лишние символы

XMPP: mogul82@jabber.ru Фанбой AMD

15 (12.06.2011 21:31:02 отредактировано mogul82)

во
там только регулярное выражение в gsub надо подредактировать, что бы точки в конце не было после user-pk.example.com.

 Консоль:
awk '/ethernet/ || /ddns-fwd-name/ {{ gsub("[\;\"\=]","");  print $3}}' /home/mogul82/test/ww

XMPP: mogul82@jabber.ru Фанбой AMD

16

$name =~ s/"//g;
chop $name;

Ищу дополнительный заработок (удалёнка).
Пьянка без секса – признак алкоголизма.

17

 Консоль:
$ sed -rn '/^\s*hardware ethernet\s+/{s///;h};/^\s*set ddns-fwd-name = "/{s///;H;g;s/(.*);\n(.*)\.";/\1 \2/p}' kt.txt
00:xx:xx:a1:e5:b3 user-pk.example.com

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

18

у меня короче вариант хы

XMPP: mogul82@jabber.ru Фанбой AMD

19

mogul82 пишет:

у меня короче вариант хы

мой более надёжный.

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

20

чем?

XMPP: mogul82@jabber.ru Фанбой AMD

21

mogul82 пишет:

чем?

mogul82 пишет:

/ethernet/

может встретится где угодно. и далее тоже.

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

22

в данном случае мы работаем с определенным блоком текста

XMPP: mogul82@jabber.ru Фанбой AMD

23

mogul82 пишет:

в данном случае мы работаем с определенным блоком текста

ваша голова, ваши грабли

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

24 (13.06.2011 00:52:42 отредактировано mogul82)

drBatty пишет:

ваша голова, ваши грабли

даже не знаю как это воспринимать

XMPP: mogul82@jabber.ru Фанбой AMD

25

mogul82 пишет:

даже не знаю как это воспринимать

очень просто - вы пишете скрипт, и забываете о нём. А через год ваш скрипт намертво валит всю систему. только потому, что какой-то идиот зарегал www.my-ethernet.ru  ac

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

26 (13.06.2011 12:25:22 отредактировано mogul82)

ну приравняем к полям
regex правд не исправил, точка остается в конце, но это мелочи

 Консоль:
awk '$2~/ethernet/ || $2~/ddns-fwd-name/ {{ gsub("[\;\"\=]","");  print $3}}' /home/mogul82/test/ww

все равно короче у меня -)



 Консоль:
awk '$2~"^ethernet" || $2~"^ddns-fwd-name" {{ gsub("[\;\"\=]","");  print $3}}' /home/mogul82/test/ww

оба будут работать правильно

XMPP: mogul82@jabber.ru Фанбой AMD

27

mogul82 пишет:

awk '$2~"^ethernet" || $2~"^ddns-fwd-name" {{ gsub("[\;\"\=]","");  print $3}}' /home/mogul82/test/ww

оба будут работать правильно

вот вам эти грабли в лоб уже и заехали:

  hardware ethernet 00:xx:xx:a1:e5:b3;

НЕ начинается со слова ethernet. Потому-то у меня и длиннее

drBatty пишет:

/^\s*hardware ethernet\s+/

видите лишние символы?  ae
на самом деле, на sed почти всегда получается короче всего, ибо там команды всегда в 1 символ. Специальный ЯП для одностроков  wink

mogul82 пишет:

regex правд не исправил, точка остается в конце, но это мелочи

mogul82 пишет:

все равно короче у меня -)

ну фапайте на размер недоделанного однострока. ac

Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

28

drBatty пишет:

вот вам эти грабли в лоб уже и заехали:

Переменная 2а я для чего поставил
У автора так же определено кстати, только по другому логика работает

http://imglink.ru/pictures/13-06-11/0b5 … 15ff8b.jpg

http://imglink.ru/thumbnails/13-06-11/0532e36045b27928ef41b761cf8f3e0b.jpg

XMPP: mogul82@jabber.ru Фанбой AMD

29

Ну и раз этот синтаксис статический то можно, еще кучу способов замутить
даже если не статический то можно много чего наработать: с проверкой на определенной строке, менять логику выборки строк и много чего еще
займусь на досуге думаю еще можно укоротить или сделать еще по "шаблонней"

XMPP: mogul82@jabber.ru Фанбой AMD

30

не могу придумать как обойти

172.16.0.56 2011/06/10 2011/06/11 xxx:xxx:xxx:27:a1:01 DIR-320.example.com
172.16.0.56 2011/06/11 2011/06/11 xxx:xxx:xxx:27:a1:01 DIR-320.example.com

чтоб не повторялись.

Ищу дополнительный заработок (удалёнка).
Пьянка без секса – признак алкоголизма.