[+] Perl - okre

Potrzebujesz pomocy z C, C++, perl, python, itp.
Awatar użytkownika
markossx
Beginner
Posty: 489
Rejestracja: 26 maja 2007, 16:01
Lokalizacja: Polska

[+] Perl - określona kolumna z tablicy

Post autor: markossx »

Hej.

Mam drobny problem z wyciągnięciem kolumny z tablicy.

Kod: Zaznacz cały

my @cmd = `netstat -vatnp | grep -E '10.8'`;
Dostaję:

Kod: Zaznacz cały

tcp   0   0   192.168.10.10:35612    192.168.10.8:3846      ESTABLISHED 3235/process
Potrzebuję piątą kolumnę z wyniku, bez zapisywania do plików.
Jak to ogarnąć?
drekkett
Posty: 17
Rejestracja: 24 lipca 2008, 22:01

Post autor: drekkett »

Kod: Zaznacz cały

my @cmd = `netstat -vatnp | grep -E '10.8' |cut -d ' ' -f5`;
Powinno załatwić sprawę.
mtp
Posty: 10
Rejestracja: 16 października 2013, 13:58

Post autor: mtp »

Powinno być:

Kod: Zaznacz cały

 my @cmd = `netstat -vatnp | grep '10.8' |tr -s ' '|cut -d ' ' -f5`;
lub

Kod: Zaznacz cały

 my @cmd = `netstat -vatnp  |awk '{if (\$5 ~ /10\.8/) print \$5}'`;
Awatar użytkownika
markossx
Beginner
Posty: 489
Rejestracja: 26 maja 2007, 16:01
Lokalizacja: Polska

Post autor: markossx »

Dzięki Panowie :)
Działa opcja mtp z cut. Podoba mi się użycie awk w tym miejscu ale zarówno moje próby
jak i podpowiedź mtp zwracają
Use of uninitialized value $5 in concatenation (.) or string at
./conn-checker.pl line 14
Interpretuje zmienną awk jak swoją własną.
mtp
Posty: 10
Rejestracja: 16 października 2013, 13:58

Post autor: mtp »

Tak racja, mój błąd, poprawiłem.

Natomiast jeśli chciałbyś podzielić tak jak pisałeś w pierwszym wpisie to:

Kod: Zaznacz cały

my @cmd = `netstat -vatnp`;

foreach $line (@cmd){
@a=split (" ",$line);
if (@a[4] =~/10\.8/) {print "@a[4] \n"};
}
Weź uwagę na to, że to co Ci napisałem sprawdza czy adres IP którego szukasz znajduje się w piątej kolumnie.
Awatar użytkownika
markossx
Beginner
Posty: 489
Rejestracja: 26 maja 2007, 16:01
Lokalizacja: Polska

Post autor: markossx »

Świetne, instruktywne wyjaśnienie, dzięki.
ODPOWIEDZ