Provnávání seznamů IP adres

pokus

Provnávání seznamů IP adres
« kdy: 14. 11. 2013, 11:01:59 »
Ahoj,

Snažím se udělat skript, který by porovnával dva seznamy IP adres a vypsal všechny ip adres které jsou v druhém seznamu ale nejsou v prvním seznamu. Seznamy jsou dva textové soubory s ipadresami podsebou...
Vymyslel jsem něco takového.

Kód: [Vybrat]
#!/bin/bash

for i in $(cat ip2.txt)
do
if [ -z 'cat ip1.txt | grep $i' ]; then
echo $i
fi;
done
exit 0

Můžete mi prosím poradit kde dělám chybu?
« Poslední změna: 14. 11. 2013, 20:52:12 od Petr Krčmář »


pokus

Re:Prorovnávání seznamů ip adres
« Odpověď #1 kdy: 14. 11. 2013, 11:08:19 »
Už jsem na to přišel sdiff file.txt file2.txt

PetrV

Re:Prorovnávání seznamů ip adres
« Odpověď #2 kdy: 14. 11. 2013, 12:24:02 »
if [ $(cat ip1.txt | grep $i | wc -l) -lt 1 ];

DgBd

  • ****
  • 283
    • Zobrazit profil
    • E-mail
Re:Prorovnávání seznamů ip adres
« Odpověď #3 kdy: 14. 11. 2013, 15:03:27 »
A cenu za zbytečné použití příkazu cat získávají oba pacienti zdejšího ústavu.

PetrV

Re:Prorovnávání seznamů ip adres
« Odpověď #4 kdy: 14. 11. 2013, 16:49:53 »
A cenu za zbytečné použití příkazu cat získávají oba pacienti zdejšího ústavu.

čím více cat, tím více unix. To je slyšet na každý vietnamský tržnici.


alfi

  • ****
  • 339
    • Zobrazit profil
    • E-mail
Re:Provnávání seznamů IP adres
« Odpověď #5 kdy: 15. 11. 2013, 09:14:05 »
nedávno jsem řešil něco podobného a objevil v debian balíčcích grepcidr (neuvěřitelné, jaké všechny nástroje se tam dají najít). podle popisu nejspíš můžou být první seznam i jen IP adresy místo rozsahů, ale doplnit všude "/32" na konec by taky šlo :-)
Kód: [Vybrat]
grepcidr can be used to filter a list of IP addresses against  one  or  more  Classless  Inter-Domain  Routing
(CIDR) specifications, or arbitrary networks specified by an address range.
Kód: [Vybrat]
echo -e "192.168.1.1\n192.168.1.2" | grepcidr "192.168.1.2"
192.168.1.2

Ogar

Re:Provnávání seznamů IP adres
« Odpověď #6 kdy: 15. 11. 2013, 14:42:16 »
A co na to jit trosku sofistikovaneji, elegantneji a s mensi slozitosti nez n2, treba 2*log2n?

Kód: [Vybrat]
sort ip1.txt ip2.txt | uniq -d >ip_tmp.txt
sort ip2.txt ip_tmp.txt | uniq -u >ip_diff.txt

Prvni radek: 'sort' prikaz spoji oba seznamy dohromady, setridi, a prikaz 'uniq -d' vypise pouze duplicitni radky.
Druhy radek: 'sort' opet dela to same, ale 'uniq -u' vypise pouze unikatni radky.

Ted je jenom otazka, jak velke jsou obe mnoziny a jak velky je jejich prunik a rozdil, protoze pri jednom pomeru je vhodnejsi posloupnost 'uniq -d' a 'uniq -u', pri jinem 'uniq -u' a az pak 'uniq -d'. Ale to uz je na analyze konkretni situace ...

P.S. 'sort' tridi metodou qsort, proto ta slozitost log2n