Linux-Bulgaria.ORG
навигация

 

начало

пощенски списък

архив на групата

семинари ...

документи

как да ...

 

 

Предишно писмо Следващо писмо Предишно по тема Следващо по тема По Дата По тема (thread)

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


  • Относно:

 

наши приятели

 

линукс за българи
http://linux-bg.org

FSA-BG
http://fsa-bg.org

OpenFest
http://openfest.org

FreeBSD BG
http://bg-freebsd.org

KDE-BG
http://kde.fsa-bg.org/

Gnome-BG
http://gnome.cult.bg/

проект OpenFMI
http://openfmi.net

NetField Forum
http://netField.ludost.net/forum/

 

 

Linux-Bulgaria.ORG

Mailing list messages are © Copyright their authors.