Re: lug-bg: sed, awk help
- Subject: Re: lug-bg: sed, awk help
- From: Peter Pentchev <roam@xxxxxxxxxxx>
- Date: Mon, 5 Jul 2004 18:49:08 +0300
On Sun, Jul 04, 2004 at 08:12:49PM +0300, Dimitar Terziev wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> Ситуацията е следната:
> Samba сървър, за около 40 клиенти, като не е желателно в него да се "ровят"
> външни хора (мрежата е с няколко хиляди потребители).
>
> Поради някои изисквания - не може да има пароли на папките.
> Направил съм firewall с iptables, като съм описал кои ip адреси имат достъп до
> сървъра.
> Отделоно, има един файл - /etc/macs, в който са описани MAC адресите
> (във вида IP MAC ). (в случая не е удобно да записвам маковете в правилата на
> iptables).
[snip]
> Значи, от mysqldump получавам следните записи:
> '212.116.157.11','00:02:02:02:02:02'
> '1.1.1.1','11:11:11:11:11:11'
> '2.3.4.5','31:16:10:31:41:12'
>
> въпроса ми е - как да кажа на sed или awk да вземе всичко, без ' и ,
> и да се получи това:
>
> 212.116.157.11 00:02:02:02:02:02
Виждам, че доста хора вече са отговорили - което може да се очаква, при
положение, че три-четири дни не пипах изобщо компютър, да не говорим за
Интернет :) Но все пак, в духа на TMTOWTDI, нужно ли е наистина да
parse-ваш изхода от mysqldump, ако можеш да убедиш command-line клиента
да ти свърши работата? :)
Ако таблицата ти изглежда по начин, подобен на този...
| macs | CREATE TABLE `macs` (
`ads` char(20) NOT NULL default '',
`mac` char(20) NOT NULL default ''
) TYPE=MyISAM |
...то можеш да направиш нещо като това :)
[roam@straylight ~]> mysql -BNe 'select concat(ads, " ", mac) from macs' test
212.116.157.11 00:02:02:02:02:02
1.1.1.1 11:11:11:11:11:11
2.3.4.5 31:16:10:31:41:12
[roam@straylight ~]>
Дори опцията -B не ти е непременно нужна, ако пренасочиш изхода на mysql
клиента към файл или pipe:
[roam@straylight ~]> mysql -Ne 'select concat(ads, " ", mac) from macs' test > foo
[roam@straylight ~]> cat foo
212.116.157.11 00:02:02:02:02:02
1.1.1.1 11:11:11:11:11:11
2.3.4.5 31:16:10:31:41:12
[roam@straylight ~]>
...и няма нужда нито от sed, нито от awk :)
А ако все пак настояваш...
[roam@straylight ~]> cat foo
'212.116.157.11','00:02:02:02:02:02'
'1.1.1.1','11:11:11:11:11:11'
'2.3.4.5','31:16:10:31:41:12'
Това е изходният файл във формат, подобен май на това твоето.
Убеждаваме awk да приема и апостроф, и апостроф-запетая-апостроф за
field separators:
[roam@straylight ~]> awk -F"'(,')?" '{print $2 " " $3}' foo
212.116.157.11 00:02:02:02:02:02
1.1.1.1 11:11:11:11:11:11
2.3.4.5 31:16:10:31:41:12
[roam@straylight ~]>
Voila! :) Но според мен решението с mysql -N и concat е малко
по-добро...
Поздрави,
Петър
--
Peter Pentchev roam@xxxxxxxxxxx roam@xxxxxxxx roam@xxxxxxxxxxx
PGP key: http://people.FreeBSD.org/~roam/roam.key.asc
Key fingerprint FDBA FD79 C26F 3C51 C95E DF9E ED18 B68D 1619 4553
This sentence contains exactly threee erors.
Attachment:
pgpJuKioVVu_a.pgp
Description: PGP signature
|