• 43 odgovora
  • 11.701 pregleda
Re: Pišemo zajedno: ES oneliner #0001 23.09.2004. u 19:45 · pre 268 meseci #21
PHP resenje ne radi, popeye:


root@es:~# netstat -nat | php -r 'print_r(array_count_values(preg_grep("/^[A-Z_]+[12]*$/", preg_split("/[\s]+/", fread(STDIN, 5000)))));'
Array
(
[ESTABLISHED] => 24
[TIME_WAIT] => 37
[FIN_WAIT_1] => 1
)
root@es:~# netstat -nat|perl -e '/[A-Z_]{2,}[12]?/&&$*{$&}++while<>;@^=keys%{*};print"$*{$*=pop@^} $*\n"while$#{^}>=0'
39 LISTEN
1 UNIX
200 ESTABLISHED
37 FIN_WAIT_2
14 CLOSED
4 FIN_WAIT_1
484 TIME_WAIT
Re: Pišemo zajedno: ES oneliner #0001 23.09.2004. u 19:49 · pre 268 meseci #22
Evo bzero-ovog, radi na freebsd-u (perl 5.8.5):

root@es:~# netstat -nat|perl -e '/[A-Z_]{2,}[12]?/&&$*{$&}++while<>;@^=keys%{*};print"$*{$*=pop@^} $*\n"while$#{^}>=0'
1 UNIX
39 LISTEN
190 ESTABLISHED
1 LAST_ACK
14 CLOSED
32 FIN_WAIT_2
7 FIN_WAIT_1
454 TIME_WAIT
root@es:~# netstat -nat|perl -e '/([A-Z_]{2,}[12]*)\n/&&$u{$1}++while<>;map{print"$_-$u{$_}\n"}keys(%u);'
TIME_WAIT-458
FIN_WAIT_1-8
CLOSED-14
FIN_WAIT_2-33
LAST_ACK-1
ESTABLISHED-186
LISTEN-39


..ali ne i na linuxu (perl 5.8.4):

root@noc {20:48:43 - Thu Sep 23}
[ ~ ]$ netstat -nat|perl -e '/[A-Z_]{2,}[12]?/&&$*{$&}++while<>;@^=keys%{*};print"$*{$*=pop@^} $*\n"while$#{^}>=0'
8 LISTEN
17 ESTABLISHED
1 CLOSE_WAIT
1 TIME_WAIT
root@noc {20:48:52 - Thu Sep 23}
[ ~ ]$ netstat -nat|perl -e '/([A-Z_]{2,}[12]*)\n/&&$u{$1}++while<>;map{print"$_-$u{$_}\n"}keys(%u);'
ESTABLISHED-17


Ispise samo established, verovatno si i ti popeye to dobio.
Re: Pišemo zajedno: ES oneliner #0001 23.09.2004. u 19:57 · pre 268 meseci #24
PHP kod mene na Linuxu radi:

Code:
Kerber root # netstat -nat | php -r 'print_r(array_count_values(preg_grep("/^[A-Z_]+[12]*$/", preg_split("/[\s]+/", fread(STDIN, 5000)))));'
Array
(
    [LISTEN] => 4
    [ESTABLISHED] => 31
    [CLOSE_WAIT] => 3
)
Kerber root # netstat -nat|perl -e '/[A-Z_]{2,}[12]?/&&$*{$&}++while<>;@^=keys%{*};print"$*{$*=pop@^} $*\n"while$#{^}>=0'
4 LISTEN
31 ESTABLISHED
3 CLOSE_WAIT
Kerber root #
Re: Pišemo zajedno: ES oneliner #0001 23.09.2004. u 20:26 · pre 268 meseci #25
Pa radi samo delimicno, verovatno te zeza ograniceni fread na 5000 bajtova.

Netstat output na opterecenijim serverima sa dosta aktivnih konekcija zna da bude MNOGO veci.

Dalje, evo iskoristih bzero-vu ideju da napravim i svoju varijantu toga, ovo mi radi i u linuxu i u bsd-u:

netstat -nat|perl -e '/[A-Z_]{2,}[12]?/&&$*{$&}++while<>;map{print"$*{$_} $_\n"}keys%{*}'
Re: Pišemo zajedno: ES oneliner #0001 23.09.2004. u 20:52 · pre 268 meseci #27
PHP resenje izlazi iz okvira postavke zadatka:


alex@home:~$ netstat -nat | php -r 'print_r(array_count_values(preg_grep("/^[A-Z_]+[12]*$/", preg_split("/[\s]+/", fread(STDIN, 5000)))));'
-bash: php: command not found
alex@home:~$


Poz,
alex.
Potpis
Alex: My favorite site is http://localhost/
R.J. Oppenheimer: "I am become death, destroyer of worlds" (1945 AD)
tweet.13x ||
linkedin.13x
Re: Pišemo zajedno: ES oneliner #0001 23.09.2004. u 21:17 · pre 268 meseci #28
Hehe, pa u svim većim distribucijama (Debian, Fedora, Gentoo, Mandrake...) dolazi i php-cli, te ispunjava uslov da se izvršava u nekom od skripting jezika na većini Linux mašina.

Ali ako ti tako kažeš, onda mora da je tačno. :)
Re: Pišemo zajedno: ES oneliner #0001 23.09.2004. u 22:22 · pre 268 meseci #30
Mislim kada vec krademo tudje ideje, sta ce nam map{$_} :).

Code:
netstat -nat|perl -e'/ [A-Z]{2}.*/s&&$a{$&}++for<>;print reverse%a'


Pazi kada niko nije probao sa foreach :)
Potpis
CHUPCKO
Re: Pišemo zajedno: ES oneliner #0001 23.09.2004. u 23:10 · pre 268 meseci #33
Code:

netstat -na|sed -e's/^t.\{67\}//;t;D'|uniq -c


hmmm... ne moze bez sort pre uniq

Code:

netstat -na|sed -e's/^t.\{67\}//;t;d'|sort|uniq -c

Re: Pišemo zajedno: ES oneliner #0001 24.09.2004. u 08:53 · pre 268 meseci #35
Neko je pre postovao reply sa awk resenjem ( "vrider" ja mislim ) koje ima par nedostataka...

naime kod vecine awk verzija delimiter je po default-u na space karakteru
tako da kobasa od:
netstat -nat | awk -F\ '{ print $6 }' | uniq -c ( koja ujedno i ne radi )

moze stati u:
netstat -nat|awk '{print $6}'|uniq -c

sto mislim da je ujedno i najmanje zahtevno, najbrze, najrazumljivije ( ovde ide jos nekoliko superlativa )...
ne kapiram zbog cega ljudi toliko forsiraju perl i php za ovako jednostavne stvari.

[sarkazam]
jel' se prihvata resenje u C-u?
i ako da, jel' mora biti registrovan projekat na SF.net da bi se uvazio? ili jos bolje da ima sajt sa skrinshotima i cvsweb interfejsom ;)

[/sarkazam]

izvinjavam se ako sam nekome pokvario provod ovime, izacicu iz peska right away L;)


Potpis
"It's okay, I'm just admiring to the shape of your skull!" -- Dr. Gonzo
Re: Pišemo zajedno: ES oneliner #0001 24.09.2004. u 10:56 · pre 268 meseci #36
hmm, mislim da tek ovako daje okey rezultat:
Code:

netstat -nat|awk 'NR>2{print$6}'|sort|uniq -c


ujedno to bi trebalo da bude najkrace reshenje.
Re: Pišemo zajedno: ES oneliner #0001 24.09.2004. u 13:26 · pre 268 meseci #38
priznajem, nisam skontao da onda mogu da sklonim t iz -nat :))

kad smo kod awk-a ;)
Code:

netstat -na|awk '/^t/{a[$6]++}END{for(v in a)print v,a[v]}'


ima i awk hash array :)))
Re: Pišemo zajedno: ES oneliner #0001 24.09.2004. u 14:42 · pre 268 meseci #40
Moze li neko objasnjenje zasto je neophodan sort, jer vidim da ga ubacujete?
Potpis
JaFreelancer.com
Odgovori
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme