Fórum Root.cz
Hlavní témata => Server => Téma založeno: pokus 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.
#!/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?
-
Už jsem na to přišel sdiff file.txt file2.txt
-
if [ $(cat ip1.txt | grep $i | wc -l) -lt 1 ];
-
A cenu za zbytečné použití příkazu cat získávají oba pacienti zdejšího ústavu.
-
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.
-
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 :-)
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.echo -e "192.168.1.1\n192.168.1.2" | grepcidr "192.168.1.2"
192.168.1.2
-
A co na to jit trosku sofistikovaneji, elegantneji a s mensi slozitosti nez n2, treba 2*log2n?
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