Автор Тема: BASH compare help  (Прочетена 1765 пъти)

martos

  • Напреднали
  • *****
  • Публикации: 110
    • Профил
    • WWW
BASH compare help
« -: Dec 10, 2010, 12:01 »
Здравейте,

Търся простичък начин за сравняването на резултатите от изпълнението на две команди и извеждането на разликите, ако има такива. Резултатът и от двете команди е списък IP адреси, по един на ред.

Някакви насоки?
Активен

ROKO__

  • Напреднали
  • *****
  • Публикации: 1531
  • Distribution: Calculate Linux Workstation amd64
  • Window Manager: GNOME 2.30
  • AMD Athlon64 4000+ Dual Core 2100 MHz 2MB L2 cache
    • Профил
Re: BASH compare help
« Отговор #1 -: Dec 10, 2010, 12:07 »
Здравейте,

Търся простичък начин за сравняването на резултатите от изпълнението на две команди и извеждането на разликите, ако има такива. Резултатът и от двете команди е списък IP адреси, по един на ред.

Някакви насоки?

Не ти разбрах точно въпроса. Искаш скрипта после да те пита за два отделни параметъра от които изхода да е на два отделни реда ?
Активен

Не е важно да си добър, важно е да си най добрия!!!

http://www.calculate-linux.ru/
http://www.agilialinux.ru/

b2l

  • Напреднали
  • *****
  • Публикации: 4786
  • Distribution: MCC Interim
  • Window Manager: - // - // -
  • ...sometimes I feel like screaming... || RTFM!
    • Профил
    • WWW
Re: BASH compare help
« Отговор #2 -: Dec 10, 2010, 12:08 »
Здравейте,

Търся простичък начин за сравняването на резултатите от изпълнението на две команди и извеждането на разликите, ако има такива. Резултатът и от двете команди е списък IP адреси, по един на ред.

Някакви насоки?

man dd

PS: diff исках да кажа.
« Последна редакция: Dec 10, 2010, 12:23 от backtolife »
Активен

"Човекът е въже, опънато между звяра и свръхчовека, въже над пропаст. Човекът е нещо, което трябва да бъде превъзмогнато." - Фр. Ницше

bop_bop_mara

  • Напреднали
  • *****
  • Публикации: 2433
  • Distribution: Debian Testing
  • Window Manager: LXDE
  • Cute and cuddly
    • Профил
Re: BASH compare help
« Отговор #3 -: Dec 10, 2010, 12:18 »
Здравейте,

Търся простичък начин за сравняването на резултатите от изпълнението на две команди и извеждането на разликите, ако има такива. Резултатът и от двете команди е списък IP адреси, по един на ред.

Някакви насоки?

Код:
man dd
???

@martos т.е. трябва ти нещо като diff/cmp но не за файлове, а за низове?
Активен

laskov

  • Напреднали
  • *****
  • Публикации: 3166
    • Профил
Re: BASH compare help
« Отговор #4 -: Dec 10, 2010, 12:19 »
dd няма нищо общо. Виж diff като първо може би sort
« Последна редакция: Dec 10, 2010, 12:20 от laskov »
Активен

Не си мислете, че понеже Вие мислите правилно, всички мислят като Вас! Затова, когато има избори, идете и гласувайте, за да не сте изненадани после от резултата, и за да не твърди всяка партия, че тя е спечелила, а Б.Б. (С.С., ...) е загубил, а трети да управлява.  Наздраве!  [_]3

martos

  • Напреднали
  • *****
  • Публикации: 110
    • Профил
    • WWW
Re: BASH compare help
« Отговор #5 -: Dec 10, 2010, 12:48 »
Нека обясня малко по-добре:)

Имам команда1 с изход:

Код:
192.168.1.5
192.168.2.5
192.168.4.52
192.168.4.53
192.168.6.15
192.168.19.15

Команда2 с изход:

Код:
192.168.1.5
192.168.2.5
192.168.6.15
192.168.19.15

Искам да получа като резултат:
Код:
192.168.4.52
192.168.4.53
Активен

koue

  • Напреднали
  • *****
  • Публикации: 74
  • Distribution: FreeBSD
  • Window Manager: fluxbox
    • Профил
Re: BASH compare help
« Отговор #6 -: Dec 10, 2010, 12:50 »
Първо изпълни sort -n на двата списъка, после ако се налага (според условието) изпълни uniq на двата списъка и след това им направи diff.
Активен

Спрете да им прощавате, че не знаят какво правят!

bop_bop_mara

  • Напреднали
  • *****
  • Публикации: 2433
  • Distribution: Debian Testing
  • Window Manager: LXDE
  • Cute and cuddly
    • Профил
Re: BASH compare help
« Отговор #7 -: Dec 10, 2010, 13:10 »
Код
GeSHi (Bash):
  1. #!/bin/bash
  2.  
  3. out1=`command1 arg11 arg12 ...`
  4. out2=`command2 arg21 arg22 ...`
  5.  
  6. for word in $out1
  7. do
  8. grep $word <<<"$out2" > /dev/null || echo $word
  9. done
  10.  

Това взима изходите от 2те команди, записва ги в по една променлива (внимание - новите редове стават на спейсове). Обикаля всяка отделна дума в 1вата променлива и я търси във втората, ако не я намери, я изпизва на ст. изход. За твоя случай (понеже IP-тата са 1 дума) трябва да работи. Ако ти трябва не само да ти покаже кои от 1вия списък не се срещат във 2рия, ами и кои от 2рия не се срещат в 1вия, повтаряш for-а, заменяйки out1 с out2 и обратно.
Заради <<< това работи на bash, но не и на стандартен shell, засега не се сещам как да се заобиколи, но предполагам, че може.

@koue - сорт, uniq, diff работят с файлове. Т.е. става и с тях, но трябва изходите от командите да се записват във файлове, а засега martos не е казал, че иска това :)
Активен

martos

  • Напреднали
  • *****
  • Публикации: 110
    • Профил
    • WWW
Re: BASH compare help
« Отговор #8 -: Dec 10, 2010, 14:50 »
Код
GeSHi (Bash):
  1. #!/bin/bash
  2.  
  3. out1=`command1 arg11 arg12 ...`
  4. out2=`command2 arg21 arg22 ...`
  5.  
  6. for word in $out1
  7. do
  8. grep $word <<<"$out2" > /dev/null || echo $word
  9. done
  10.  

Това взима изходите от 2те команди, записва ги в по една променлива (внимание - новите редове стават на спейсове). Обикаля всяка отделна дума в 1вата променлива и я търси във втората, ако не я намери, я изпизва на ст. изход. За твоя случай (понеже IP-тата са 1 дума) трябва да работи. Ако ти трябва не само да ти покаже кои от 1вия списък не се срещат във 2рия, ами и кои от 2рия не се срещат в 1вия, повтаряш for-а, заменяйки out1 с out2 и обратно.
Заради <<< това работи на bash, но не и на стандартен shell, засега не се сещам как да се заобиколи, но предполагам, че може.

@koue - сорт, uniq, diff работят с файлове. Т.е. става и с тях, но трябва изходите от командите да се записват във файлове, а засега martos не е казал, че иска това :)


Едно ОГРОМНО БЛАГОДАРЯ!;)
Активен

sstefanov

  • Напреднали
  • *****
  • Публикации: 158
    • Профил
Re: BASH compare help
« Отговор #9 -: Dec 10, 2010, 15:30 »
Ако резултатите са във файлове f1 и f2 съответно, то следната команда прави това, което искаш:

grep -v -f f2 f1
Активен

martos

  • Напреднали
  • *****
  • Публикации: 110
    • Профил
    • WWW
Re: BASH compare help
« Отговор #10 -: Dec 11, 2010, 09:45 »
Трябваше ми решение без файлове. Вариантът на bop_bop_mara ми свърши перфектна работа:)
Активен

radoulov

  • Напреднали
  • *****
  • Публикации: 116
    • Профил
Re: BASH compare help
« Отговор #11 -: Dec 11, 2010, 10:49 »
Трябваше ми решение без файлове.
[...]

Код:
grep -fv <(cmd2) <(cmd1)
Активен


Подобни теми
Заглавие Започната от Отговора Прегледи Последна публикация
BASH: Как да поддържам една програма работеща
Общ форум
Regia 1 9507 Последна публикация Feb 16, 2005, 08:51
от
bash
Настройка на програми
tuxi 7 5030 Последна публикация Jun 11, 2005, 19:12
от tuxi
Моля за малко помощ за BASH
Настройка на програми
bonbon 3 3788 Последна публикация Dec 04, 2005, 16:37
от bonbon
BASH
Общ форум
Dean79 3 3921 Последна публикация Jan 13, 2006, 00:24
от Dean79
Bash присвояване на стойност от файл
Общ форум
Pulear 6 4552 Последна публикация May 21, 2006, 17:20
от Pulear