Skocz do zawartości

Awk - Wypisywanie Wierszy


julietta_b

Rekomendowane odpowiedzi

Witam wszystkich!

Mam problem. Potrzebuję pomocy.

 

Wpisuję polecenie w konsoli:

 

awk '{ RS="&"} /pass/ {print $0} '

 

 

Program wypisuje mi oczywiście wiersz zawierający ciąg znaków "pass". Jakiego użyć polecenia aby wypisał również wiersz poprzedzający?

 

Kompletnie brakuje mi pomysłu.

 

Czekam na odpowiedź. Julia

Odnośnik do komentarza
Udostępnij na innych stronach

Latwiej to juz nie bedzie. 'awk' idzie tylko do przodu, wiec musisz zapamietywac linie w której jestes, sprawdzac czy w nastepnej linii masz szukany lancuch i jesli tak to wypisywac zapamietana linie. Ale tak jak napisali w przykladzie to bedzie wooolne w przypadku plików dluzszych niz kilka linii. Chyba, ze to tylko sztuka dla sztuka albo praca domowa...

 

[EDIT]

Ten przyklad to wlasciwie gotowiec do przepisania i uruchomienia. Zakrecone, ale dziala i wcale nie tak wolno jak myslalem.

Odnośnik do komentarza
Udostępnij na innych stronach

Znalazlam cos takiego

awk -v n=2 ' /pass/ && NR>n {print $0, window[(NR-n)%n]}{window[NR%n]=$0}' /home/julia/Pulpit/file1.txt

 

W sumie OK. Próbuje dodac {RS="&"} aby podzielic wiersz, ale cos nie dziala. Ogólnie chodzi o to zeby wyswietlilo mi tylko

 

 

username=przykladowy_login

password=przykladowe haslo

 

z wiersza:

 

username=przykladowy_login&password=przykladowe haslo&redirect=index.php&sid=502e2e89eb3b2b22e86ccff3984c85cb&login=Zaloguj

 

Dla kolegi WaLDo : info potrzebne mi do pracy inzynierskiej

Odnośnik do komentarza
Udostępnij na innych stronach

[artur@collider ~]$ echo "username=przykladowy_login&password=przykladowe haslo&redirect=index.php&sid=502e2e89eb3b2b22e86ccff3984c85cb&login=Zaloguj" | awk -F\& '{print $1 "\n" $2}'
username=przykladowy_login
password=przykladowe haslo

Odnośnik do komentarza
Udostępnij na innych stronach

[artur@collider ~]$ echo "username=przykladowy_login&password=przykladowe haslo&redirect=index.php&sid=502e2e89eb3b2b22e86ccff3984c85cb&login=Zaloguj" | awk -F\& '{print $1 "\n" $2}'
username=przykladowy_login
password=przykladowe haslo

 

 

Oj zeby to takie latwe bylo. Za kazdym razem wiersz ma inna tresc (inny login i haslo). Poza tym linijka znajduje sie w duzymmm pliku tekstowym.

 

Juz sobie poradzilam. Mam linijke komend w kosoli teraz mysle nad petla i skryptem.

Odnośnik do komentarza
Udostępnij na innych stronach

Oj zeby to takie latwe bylo. Za kazdym razem wiersz ma inna tresc (inny login i haslo). Poza tym linijka znajduje sie w duzymmm pliku tekstowym.

 

Juz sobie poradzilam. Mam linijke komend w kosoli teraz mysle nad petla i skryptem.

 

Dla zainteresowanych wyglada to tak:

 

awk 'BEGIN{FS="&";OFS="\n"} /pass/ {print $1, $2} ; /Host/ {print $0} ' /home/ja/Pulpit/file1.txt | grep -B2 "^pass"

 

Teraz chodzi o skrypt, który to polecenie wrzuci w petle. Powinno plik tekstowy czytac wkólko od poczatku do konca do momentu wpisania np. exit.

Odnośnik do komentarza
Udostępnij na innych stronach

  • 2 weeks later...

Chodzi o pomysl czy gotowe rozwiazanie? Jesli to pierwsze, to pusc sobie background joba z petla nieskonczona i tym co wrzucilas powyzej. Po jego odpaleniu pobierz jego PID za pomoca $! i potem read tez w petli nieskonczonej, który bedzie sobie czekal na np. "exit", a kiedy sie doczeka to kill $PobranyPID i wyjscie z programu.

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
×
×
  • Dodaj nową pozycję...