J ezyk AWK Kurs systemu UNIX

Podobne dokumenty
skrypt powłoki to plik tekstowy, rozpoczynający się sekwencją: pierwsza linia określa powłokę, w której wykonywany jest skrypt; druga to komentarz

System operacyjny Linux

Wstęp do systemów wielozadaniowych laboratorium 19 awk

Różne pożyteczne polecenia oraz wyrażenia regularne. Kurs systemu Unix 1

Wyrażenia regularne. Wyrażenia regularne 1/41

Systemy operacyjne. Laboratorium 5. Awk podstawy. Jarosław Rudy Politechnika Wrocławska 28 lutego 2017

Przetwarzanie tekstu 2. Operacje na plikach tekstowych w systemie Linux

Jerzy Nawrocki, Wprowadzenie do informatyki

Systemy operacyjne. Laboratorium 9. Perl wyrażenia regularne. Jarosław Rudy Politechnika Wrocławska 28 lutego 2017

J.NAWROCKI, M. ANTCZAK, W. FROHMBERG, K. KOLANOWSKI, J. POCHMARA, S. WĄSIK, T. ŻOK AWK - WPROWADZENIE

JĘZYK SHELL JEST PEŁNYM JĘZYKIEM PROGRAMOWANIA

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)

SED - Stream EDitor. edytor strumieniowy. Bogumił Konopka W-11/I-21 Politechnika Wrocławska

Podstawy Programowania C++

Powłoka bash. Kurs systemu Unix 1

Przedstawię teraz tzw. podstawowe symbole wyrażenia regularne (BRE, Basic Regular Expression)

Dynamiczne przetwarzanie stron. dr Beata Kuźmińska-Sołśnia

System operacyjny Linux

Wstęp do Informatyki dla bioinformatyków

AWK. Plan wykładu. Wprowadzenie. Najprostszy program

Komentarze w PHP (niewykonywane fragmenty tekstowe, będące informacją dla programisty)

KARTA KURSU. Języki skryptowe

Metody numeryczne Laboratorium 2

Podstawy i języki programowania

Wstęp do informatyki 2011/2012. Wyrażenia regularne (sed)

$ awk f plik_z_programem plik_wejsciowy1 plik_wejsciowy2...

Wstęp do informatyki. stęp do informatyki Polecenia (cz.2)

Część 4 życie programu

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

Przekierowanie wejścia wyjścia:

Rekurencja (rekursja)

UNIX - KOLOKWIUM 3. #include <stdio.h> #include <unistd.h>

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.

1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami

1 Podstawy c++ w pigułce.

Języki formalne i automaty Ćwiczenia 6

Python wprowadzenie. Warszawa, 24 marca PROGRAMOWANIE I SZKOLENIA

1 Podstawy c++ w pigułce.

Języki i paradygmaty programowania

Pascal - wprowadzenie

JAVAScript w dokumentach HTML - przypomnienie

Systemy operacyjne. Laboratorium 7. Perl podstawy. Jarosław Rudy Politechnika Wrocławska 27 kwietnia 2017

Laboratorium Wstawianie skryptu na stroną: 2. Komentarze: 3. Deklaracja zmiennych

Opis języka AWK. Tomasz Przechlewski. 18 listopada 2000 roku

Wykorzystanie języka AWK do analizy logów systemowych

Argumenty wywołania programu, operacje na plikach

Technologie informacyjne: Arkusz kalkulacyjny

1 Przygotował: mgr inż. Maciej Lasota

Skrypty powłoki w systemie Linux

Języki programowania obiektowego Nieobiektowe elementy języka C++

Podstawy programowania C. dr. Krystyna Łapin

Wyrażenia arytmetyczne

3. Instrukcje warunkowe

Wstęp do programowania. Różne różności

Ćwiczenie 1. Wprowadzenie do programu Octave

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 26 marca kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 40

Wstęp do Informatyki i Programowania Laboratorium: Lista 0 Środowisko programowania

Warunki logiczne instrukcja if

utworz tworzącą w pamięci dynamicznej tablicę dwuwymiarową liczb rzeczywistych, a następnie zerującą jej wszystkie elementy,

Programowanie komputerowe. Zajęcia 2

C++ Przeładowanie operatorów i wzorce w klasach

Skrypty i funkcje Zapisywane są w m-plikach Wywoływane są przez nazwę m-pliku, w którym są zapisane (bez rozszerzenia) M-pliki mogą zawierać

Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Programowanie w języku Python. Grażyna Koba

Instrukcje. Operatory. Operatory. Instrukcje sterujące. wyrażenie1 && wyrażenie2 ;

Bash - wprowadzenie. Bash - wprowadzenie 1/39

Temat zajęć: Filtry, strumienie standardowe oraz przetwarzanie potokowe. stderr

DIAGRAMY SYNTAKTYCZNE JĘZYKA TURBO PASCAL 6.0

Warsztaty dla nauczycieli

Wstęp do programowania

PRACOWNIA INFORMATYCZNA BASH - PODSTAWOWE INFORMACJE

Język skryptowy: Laboratorium 1. Wprowadzenie do języka Python

Podstawy programowania w języku C i C++

Administracja i programowanie pod Microsoft SQL Server 2000

JAVAScript w dokumentach HTML (1) JavaScript jest to interpretowany, zorientowany obiektowo, skryptowy język programowania.

Technologie Informacyjne - Linux 3

Instrukcja SO powłoka BASH i skrypty powłoki Istotne jest zrozumienie działania narzędzia history powłoki BASH. Każde polecenie wprowadzone i

Narzędzia informatyczne w językoznawstwie

Systemy operacyjne. Laboratorium 6. Awk wyrażenia regularne. Jarosław Rudy Politechnika Wrocławska 28 lutego 2017

Języki skryptowe w programie Plans

Informacja o języku. Osadzanie skryptów. Instrukcje, komentarze, zmienne, typy, stałe. Operatory. Struktury kontrolne. Tablice.

Serwer WWW Apache. Plik konfiguracyjny httpd.conf Definiujemy m.in.: Aktualne wersje 2.4.6, , zakończony projekt

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

Python. Skąd taka nazwa? Kurs systemu UNIX 1

Kiedy i czy konieczne?

Ćwiczenie 1. Wprowadzenie do programu Octave

Baltie 3. Podręcznik do nauki programowania dla klas I III gimnazjum. Tadeusz Sołtys, Bohumír Soukup

Podstawy programowania w języku C++

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 16 kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 27

Skrypty BASH a. Systemy Operacyjne 2. Mateusz Hołenko. 4 października 2012

Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie

Wprowadzenie do języka Java

Administracja sieciowymi systemami operacyjnymi III Klasa - Linux

Opis: Instrukcja warunkowa Składnia: IF [NOT] warunek [AND [NOT] warunek] [OR [NOT] warunek].

Pytania dla języka Python

JAVAScript w dokumentach HTML (1)

Bash i algorytmy. Elwira Wachowicz. 20 lutego

Powłoka I. Popularne implementacje. W stylu sh (powłoki zdefiniowanej w POSIX) W stylu csh. bash (najpopularniejsza) zsh ksh mksh.

Elementy języków programowania

C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów

Transkrypt:

Język AWK Kurs systemu UNIX 1

AWK Opracowany w laboratoriach Bella w 1978 przez Aho, Weinbergera i Kernighana Język do przetwarzania plików tekstowych Kurs systemu UNIX 2

AWK: pierwsza odsłona! AWK jest językiem programowania Można go jednak traktować jako proste połączenie funkcjonalności następujących programów: grep, do wybierania interesujących linii, cut, do wybierania interesujących kolumn, tr -s [:blank:], ponieważ domyślnym separatorem jest ciąg spacji i tabulacji. Kurs systemu UNIX 3

Czy AWK jest przestarzały? Czy prawdą jest, że: AWK < Perl < Python Chyba nie: AWK-a łatwiej się nauczyć, do małych zadań bardzo często wystarcza Kurs systemu UNIX 4

Pliki, rekordy, pola podstawowymi parametrami awk są pliki do przetworzenia. Pliki podzielone są na wiersze (rekordy), wiersze zaś na pola. Domyślnym separatorem jest ciąg białych znaków. Oczywiście separatorem może być dowolny znak. W takim formacie przechowywana jest większość unixowych plików konfiguracyjnych. Taki format mają również bardzo często dane wyjściowe poleceń (np. ls) Kurs systemu UNIX 5

Program w awk Podstawowy program: /wzorzec1/{akcja1} /wzorzec2/{akcja2} /wzorzec3/{akcja3} Dla każdej linijki, jeżeli pasuje ona do wzorca to wykonana jest odpowiednia akcja. Wzorcem może tekst, może być wyrażenie regularne, w tym miejscu może znaleźć się również dowolny warunek logiczny Zmienne o nazwach $1, $2, oznaczają kolejne pola. Można tych zmiennych używać w części {akcja}. Najprostsza akcja to print. Oznacza ona wypisanie całej linii. Kurs systemu UNIX 6

Dostęp do pól Zmienna $1 to pierwsze pole, $2 drugie itd. Cała bieżąca linia to $0. Przykład: wybranie z pliku dwóch kolumn i zamiana miejscami. awk '{print $3,$2 }' powyżej jako filtr, inna możliwość to awk -f program.awk dane_we1 dane_we2 > dane_wy Kurs systemu UNIX 7

Składnia wyrażeń regularnych ^ początek pola $ koniec pola. 1 dowolny znak alternatywa wzorców * 0 lub więcej wystąpień tego co przed + 1 lub więcej wystąpień tego co przed? 0 lub 1 powtórzenie tewgo co przed [ ] znak z zestawu ([abcd]) [^abcd] znak spoza zestawu () nawiasy grupują podwyrażenia Kurs systemu UNIX 8

Wyrażenia regularne Przykład: program wyświetlający te linie, które są liczbami /^[0-9]+(\.[0-9]+)?$/ { print $0 } W ten sposób uzyskujemy funkcjonalność programu grep. Kurs systemu UNIX 9

Warunki zamiast wzorców Zamiast wzorca może pojawić się warunek: awk '$4 > 100 {print $1*$4}' Inne warunki arytmetyczne: ==,!=, >, <, >=, <= Zyskujemy w ten sposób funkcjonalność arkusza kalkulacyjnego. Kurs systemu UNIX 10

Arytmetyka Operatory arytmetyczne: +, -, *, /, % (reszta z dzielenia), ^ (potęga) Funkcje matematyczne: sin, cos, log, exp, int (część całkowita), rand (wartość pseudolosowa) Nawiasy i priorytety bez niespodzianek. zm w wyrażeniu oznacza wartość zmiennej ($ niepotrzebny) Automatyczna konwersja z napisów do liczb: 1 + "123" = 124 1 + "Ala" = 1 Kurs systemu UNIX 11

Zmienne Przyjmują wartości liczbowe lub tekstowe Nie deklaruje się zmiennych (na początku 0 lub "") Podstawienie: x=x+1 lub x=x x Zagadka: Jaka jest wartość wyrażenia: ((2*2)(2*2))/4? Kurs systemu UNIX 12

Zmienne. Przykład Program obliczający sumę wielkości plików w kartotece: ls -l awk '/^-/{licznik = licznik+$5} END {print licznik}' Wzorce specjalne: BEGIN (przed pierwszą linią pliku) oraz END (po ostatniej). Kurs systemu UNIX 13

Wyrażenia regularne Przypominamy: wyglądają podobnie jak np. w programie sed, grupujemy podwyrażenia za pomocą normalnych nawiasów: "(" oraz ")", niestety nie ma \1, \2,... Mozna uzywać dopasowania w warunkach. wzorzec ~ tekst oznacza, że wzorzec pasuje do tekstu, natomiast wzorzec!~tekst wzorzec nie pasuje do tekstu. Fragment programu /wzorzec/{akcja} można zatem zapisać jako Kurs systemu UNIX 14

$0 ~ wzorzec {akcja} Kurs systemu UNIX 15

Zmienne wewnetrzne NR FNR FILENAME FS NF ARGC ARGV liczba przeczytanych rekordów to samo, ale w bieżącym pliku nazwa bieżącego pliku separator pol liczba pol w bieżącym rekordzie liczba argumentów lini poleceń Tablica argumentów linii poleceń Kurs systemu UNIX 16

Instrukcje strukturalne instrukcja for. Składnia jak w języku C: for(i1;i2;i3){ polecenia } instrukcja while. Składnia: while(w) { polecenia } instrukcja if Składnia: if (w) { polecenia } else { polecenia } next przejcie do nast. rekordu polecenie2 nigdy sie nie wykona { polecenie1 next; polecenie2; } Kurs systemu UNIX 17

Tablice Dynamiczny rozmiar nie trzeba deklarować możliwe tablice wielowymiarowe, do których odwołujemy się jak w Pascalu (a[x,y]) możliwe tablice asocjacyjne (indeksowane słowami) i potem pisać: x="ala"; print a[x]. Kurs systemu UNIX 18

Przykład: odwracanie kolejności wierszy { wiersze[nr] = $0 } END { licznik=nr; while (licznik > 0) { print wiersze[licznik]; licznik--; } } Kurs systemu UNIX 19

for dla tablic Można przeglądać tablice asocjacyjne. Składnia: for (z in T) { rob cos dla T[z] } Działa również dla tablic wielowymiarowych. Kurs systemu UNIX 20

Funkcje Definicja: function nazwa(lista parametrow) { } instrukcje; Parametry przekazywane przez wartość. Zwracane instrukcją return. Nie ma tych kłopotów z return co w bash-u, można zwracać dowolny napis lub tekst. Kurs systemu UNIX 21

Jak napisać skrypt w awk? Pierwsza linijka musi wyglądać mniej więcej tak: #!/usr/local/bin/awk -f Potem jest normalny program w awk. Parametry przekazywane są za pomocą zmiennych ARGC (liczba argumentów) oraz tablicy ARGV (same argumenty). Te parametry, które nie są nazwami plików powinny być obsłużone w bloku BEGIN i następnie skasowane, przykładowo: if ( /-/ ~ ARGV[i] ) { } # zapamietaj, ze opcja i jaka ARGV[i] = ""; Kurs systemu UNIX 22

Funkcje dzialajace na tekstach length długość tekstu. gsub(r,s,t) podstawia ciąg tekstowy t w ciągu s za każdym razem, gdy pasuje wyrażenie regularne r i zwraca liczbę dokonanych podstawień. split(tekst, T, znak) dzieli tekst na na części, które umieszcza w tablicy, zwraca ich liczbę. Przykładowo split("5-10-01",t,-") zwróci wartość 3, a ponadto ustali: T[1]="5", T[2]="10", T[3]="01" substr(s,m,n) oznacza n znaków z s poczynając od znaku m-tego, przy czym numeracja jest od 1. Kurs systemu UNIX 23

Zastosowanie length Za pomocą funkcji length można liczyć znaki w pliku. Przykładowo: { len += 1+length($0) } END {print "Znaków w pliku jest " len;} Rozwijając ten program w stronę wc dodalibyśmy: { wc += NF; } Linie już są liczone: robi to zmienna NR. Kurs systemu UNIX 24

Przykłady na gsub Można używać wersji dwuargumentowej, wtedy to w czym zmieniamy to $0. Można pisać filtry w ten sposób: { } gsub(/[0-9]+\.[0-9]+ /, "<real>") gsub(/[0-9]+ /,"<int> "); print ; # czyli print $0 Program linijkę 23.5 45.5 45 i tak dalej Kurs systemu UNIX 25

zmienia na <real> <real> <int> i tak dalej sub działa podobnie, ale podstawienie tylko raz. Dla gsub trzyargumentowego: zm="abrakadabra"; naco = "ba"; gsub(/a(b d)/,naco,zm); print zm; wypisze tekst: barakbabara. Kurs systemu UNIX 26

I tu w zasadzie moglibyśmy zakończyć Kurs systemu UNIX 27

Ale że zostało jeszcze trochę czasu... To omówimy Kurs systemu UNIX 28

Inne funkcje zwiazane z zamienianiem index(s,t) zwraca pozycję, na której po raz pierwszy w ciągu s pojawił się podciąg t, czyli np. index("c","rumcajs") zwraca 4. Jeżeli podciąg nie zostanie znaleziony to zwrócona zostanie wartość 0. Podobne działa funkcja match(s,t), ale pierwszy argument jest wyrażeniem regularnym. Wynik jest przechowywany w zmiennej RSTART, a długość dopasowanego fragmentu w zmiennej RLENGTH. Kurs systemu UNIX 29

Przykład Zadanie: chcemy zmienić każdą liczbę całkowitą n w tekście na tekst n (naprawd n!). Kurs systemu UNIX 30

Rozwiązanie: while ( match(/[0-9]+ /, linia)!= 0) { fragment = substr(linia,rstart,rlength-1); ile_zostalo = length(linia) - (RSTART+RLENGTH-1); linia = substr(linia,rstart,ile_zostalo); wynik = wynik fragment " (naprawd " fragment "!)" ; } wynik = wynik linia; Filtr ten zmieni zdanie: Pilni studenci dostan 5 a leniwi 2 na zdanie Kurs systemu UNIX 31

Pilni studenci dostan 5 (naprawde 5!) a leniwi 2 (naprawde 2!) Kurs systemu UNIX 32