Bash zapisywanie operacji/danych w tablicach

0

Witam
chciałbym zapisać pewną wartość w tablicy aby można było odwołać się do tej tablicy
dla przykładu, mam chociażby taką komendę
netstat -alpn | grep :80 | awk '{print $5}' |awk -F: '{print $(NF-1)}' |sort | uniq| sort -nr|head

Wyrzuci mi 10 Adresów IP. Do każdego adresy chciałbym się odwoływać.
Próbowałem takie coś:

zmienna$(netstat -alpn | grep :80 | awk '{print $5}' |awk -F: '{print $(NF-1)}' |sort | uniq| sort -nr|head);
echo $(zmienna[2]) 

niestety taki sposób nie działa - wynik nie jest zapisywany w tablicy, a tylko jako zmienna.

Na chwilę obecną jedyny sposób jaki wykombinowałem to:

netstat -alpn | grep :80 | awk '{print $5}' |awk -F: '{print $(NF-1)}' |sort | uniq| sort -nr|head > plik_tymczasowy

while read ip;do
echo $ip;
done; < plik_tymczasowy

Ale nie chcę działać na plikach tymczasowych.

Czy kojarzy ktoś z państwa ten problem i mógłby coś doradzić jak go rozwiązać?

1

Po pierwsze, nie ma sensu łączyć grep i awk, bo to marnowanie procesu i duplikowanie efektu.
Po drugie, możesz użyć xargs by zrobić to co chcesz:

netstat -aln | awk '/:80/ { print $5 }' | sed 's/:.*//' | sort -nur | head | xargs echo
0

Okej odnośnie awk i grep zgadza się, z tym że to było tylko poglądowe.
Niestety to rozwiązanie nie jest tym czego szukam, ponieważ wykona to jakąś operację - np wyświetlenia WSZYSTKICH adresów IP, a to nie jest to czego szukam.
Dla przykładu - chciałbym np sprawdzić geolokalizację każdego z IP albo wyświetlić whois dla każdego z IP które wykryje

netstat -aln | awk '/:80/ { print $5 }' | sed 's/:.*//' | sort -nur | head | xargs whois

oczywiście nie zadziała bo będzie chciał sprawdzić whois dla 10 adresów ip.

Dlatego właśnie chciałbym jakos rozgryźć ten temat ewentualnie wyciągając z tablic/innego sposobu wykonać konkretną operację tylko elemencie który wyzuci, i dla każdego następnego powtarzać tą operację.

0

Nie rozumiem o co Ci dokładnie chodzi. To co podałem wywoła operację whois dla każdego parametru osobno. Inaczej można to zapisać w postaci:

for ip in $(netstat -aln | awk '/:80/ { print $5 }' | sed 's/:.*//' | sort -nur | head)
do
  whois "$ip"
done

Jeśli chcesz to zrównoleglić to możesz użyć parallel.

0

Tak zgadza się, można tak wykonać tylko to jest dobre dla jednego przetworzenia wyniku netstata, a ja chcę go kilka razy przetwarzać.

Co prawda można kilka razy wykonac petlę ale raz, że wyniki netstata mogą się zmienić, a 2 że nie będzie to efektywne.

To moze po prostu inaczej zadan pytanie.
mam ip:
24.24.24.24
23.23.23.23
123.123.123.123
124.124.124.124
i dla każdego z nich chciałbym wykonac jakąs operację (zależnie od parametru który uzytkownik wybierze). Te adresy IP powinny byc zapisane w jakiejś zmiennej/tablicy, nie chcę aby były zczytywane z pliku (adresy ip które mają być przetwarzane mają być wygenerowane raz przez netstata, i dalsze inne operacje mają bazować tylko na tych danych.

1 użytkowników online, w tym zalogowanych: 0, gości: 1