Титла: проверка свободно име ( bash ) Публикувано от: mrowcp в Aug 22, 2010, 20:40 Здравейте отново :)
Идеята този път е следната: cat file.txt user1 user2 user3 user4 user5 user9 user8 user10 .... .... user51 искам да задам някакъв рейндж пр. user1-user55 и скрипта да ми върне само не заетите ( свободни ) имена. Мисля, че ще е нещо като: Код: cat users.log | while read user но не знам как да закача рейнджа който да проверява :( .И как точно да става тази проверка? Мерси Титла: Re: проверка свободно име ( bash ) Публикувано от: romeo_ninov в Aug 22, 2010, 23:35 има програма seq за генериране на цифрови поредици
и не е ли по-просто вместо Код: cat users.log | while read user Код: while read user Код: cat users.log | grep $user Код: grep $user users.log Титла: Re: проверка свободно име ( bash ) Публикувано от: mrowcp в Aug 23, 2010, 01:06 има програма seq за генериране на цифрови поредици Определено обясненията не са ми силната страна :) Аз имам вече файл, искам да го чета и резултата да е именомер на потребител който го няма в списъка: Код: cat file.txt Титла: Re: проверка свободно име ( bash ) Публикувано от: betso в Aug 23, 2010, 02:32 Нещо от сорта би могло да ти свърши работа, използвайки споменатия от romeo_ninov seq:
Цитат for i in `seq 1 51`Успех! :) Титла: Re: проверка свободно име ( bash ) Публикувано от: mrowcp в Aug 23, 2010, 16:49 Мерси и на двамата, работи идеално ;) Ако имате път към Плд обадете се да черпя по [_]3
Титла: Re: проверка свободно име ( bash ) Публикувано от: romeo_ninov в Aug 23, 2010, 16:51 Мерси и на двамата, работи идеално ;) Ако имате път към Плд обадете се да черпя по [_]3Ако имаш път през Прага се обади да пием по едно :) Титла: Re: проверка свободно име ( bash ) Публикувано от: mrowcp в Aug 25, 2010, 11:09 За да не отварям нова тема, искам да питам тук:
как да извадя предишни или следващи редове?Пример: Код: #cat file.txt Титла: Re: проверка свободно име ( bash ) Публикувано от: romeo_ninov в Aug 25, 2010, 11:31 За да не отварям нова тема, искам да питам тук:на sed има команда next, но за предишен ред нямам идея. Т.е. имам, но става доста сложно :) Титла: Re: проверка свободно име ( bash ) Публикувано от: neter в Aug 25, 2010, 12:02 Командата grep има параметри --before-context и --after-context (съответно в кратък вариант -B и -A). Можеш да ползваш тях, след което съответно с head и tail да си вземаш нужните редове. Примери:
1. ако искаш да вземеш реда над търсения Код 2. ако искаш да вземеш реда след търсения Код 3. ако искаш да вземеш реда, който е два реда по-нагоре от търсения Код и т.н. Ако искаш да вземаш по повече от един ред, променяй стойноста за head и tail ;) Титла: Re: проверка свободно име ( bash ) Публикувано от: mrowcp в Aug 25, 2010, 12:17 Командата grep има параметри --before-context и --after-context (съответно в кратък вариант -B и -A). Можеш да ползваш тях, след което съответно с head и tail да си вземаш нужните редове. Примери: Мерси за подробното инфо :) След малко тестове, интересно че синтаксиса е верен,но: Код: > grep -B 1 Godini test.txt | head -n 1 Титла: Re: проверка свободно име ( bash ) Публикувано от: b2l в Aug 25, 2010, 12:27 @mrowcp, човек ти имаш 3 записа само. Кое тисе струва грешно. Я сложи 15-20 реда и виж пак.
Титла: Re: проверка свободно име ( bash ) Публикувано от: neter в Aug 25, 2010, 13:34 grep -A 1 Godini test.txt | head -n 1Това е грешна комбинация за твоите цели. Да дообясня. Командата head взема N на брой редове от горната част на изхода. Командата tail взема N на брой редове от долната част на изхода. За твоите цели трябва да ползваш head и tail със съответстващите им по посока параметри на grep. Т.е., ако искаш да вземеш горен ред, ползваш параметъра -B на grep в комбинация с командата head. Ако искаш да вземеш долен ред, ползваш параметъра -A на grep в комбинация с командата tail. Ето как се четат командите: Код Чете се - вземи допълнително 2 реда над търсения текст и покажи най-горния от тях, с което на екрана виждаме реда, който е 2 реда по-нагоре от търсения. Код Чете се - вземи допълнително 2 реда под търсения текст и покажи най-долния от тях, с което на екрана виждаме реда, който е 2 реда по-надолу от търсения. Ако все още не разбираш, спри се малко и помисли логически ;) P.S.: За досхващане, ето какво се случва при изпълнението на грешната комбинация Код Началото на командата (частта преди правата черта) извежда това: Цитат Godini 10След това head казва да се изведе най-горният ред от този изход, при което получаваш това Цитат Godini 10А си очаквал да получиш това Цитат Adres 5 StreetЩе получиш нужния ред, ако вместо най-горния ред, кажеш на командата да изведе най-долния ред (т.е., вместо head, трябва да ползваш tail). И едно допълнение за случая, когато файлът не съдържа толкова редове, колкото сме опитали да извикаме. Т.е., ако файлът съдържа (номерирам редовете за улеснение) Цитат 1. Ime UsernameИ ние извикваме командата Код Тогава началото на командата (частта преди правата черта) ще се опита да изведе това Цитат 2. Godini 10Ред номер 4 ще бъде извикан за показване, тъй като "-A 2" означава да се вземе търсеният ред плюс още два реда след него. Тогава втората част на командата (tail) би трябвало да вземе ред номер 4, тъй като той е най-отдолу (tail чете отдолу нагоре). Но, тъй като в случая ред 4 не съществува, файлът ни приключва с третия ред, то на екрана ще се изведе ред 3 (Adres 5 Street), тъй като tail ще вземе най-долния ред, а grep ще му е предоставил 2 реда - търсеният и реда под него (няма да добави и четвъртия ред, тъй като той не съществува). При това положение, ползвайки командата с параметри, с които се очаква да изведеш на екрана реда, който е два реда по-надолу от търсения, ще изведеш на екрана реда, който е под търсения, тъй като той е последен във файла. Титла: Re: проверка свободно име ( bash ) Публикувано от: mrowcp в Aug 25, 2010, 14:45 Ахаааа ;D Мерси за изчерпателния отговор.Както е тръгнало няма да мога да смогна на черпене на [_]3 :D
|