Programowanie w systemie UNIX/awk
Wygląd
- Jest także nazwą programu początkowo dostępnego dla systemów operacyjnych będących pochodnymi UNIXa, obecnie także na inne platformy
- interpretowany język programowania, którego główną funkcją jest wyszukiwanie i przetwarzanie wzorców w plikach lub strumieniach danych. Rozpoznaje wiersze i kolumny tekstu.
Działanie
[edytuj]AWK ma proste schemat pracy: przeczytaj, wykonaj i powtórz.[1]
- AWK czyta dane wejściowe wiersz po wierszu ze strumienia wejściowego (plik, potok lub stdin) i zapisuje go w pamięci
- Skanowana jest linia dla każdego wzorca w programie i dla każdego pasującego wzorca wykonywana jest odpowiednia akcja
- Ten proces powtarza się, aż osiągnie się koniec pliku
Dostępne operacja
[edytuj]- Skanuj plik linia po linii.
- Podziel linię/plik wejściowy na pola.
- Porównaj linię lub pola wejściowe z określonymi wzorami
- Wykonuj różne czynności na dopasowanych liniach.
- Sformatuj linie wyjściowe.
- Wykonywanie operacji arytmetycznych i łańcuchowych.
- Użyj przepływu sterowania i pętli na wyjściu.
- Przekształć pliki i dane zgodnie z określoną strukturą.
- Generuj sformatowane raporty
odmiany
[edytuj]- awk
- gawk
- mawk
Sposoby pracy
[edytuj]- z linii poleceń
- Samodzielne skrypty AWK
Składnia
[edytuj]awk
Wynik:
awk Usage: mawk [Options] [Program] [file ...] Program: The -f option value is the name of a file containing program text. If no -f option is given, a "--" ends option processing; the following parameters are the program text. Options: -f program-file Program text is read from file instead of from the command-line. Multiple -f options are accepted. -F value sets the field separator, FS, to value. -v var=value assigns value to program variable var. -- unambiguous end of options. Implementation-specific options are prefixed with "-W". They can be abbreviated: -W version show version information and exit. -W dump show assembler-like listing of program and exit. -W help show this message and exit. -W interactive set unbuffered output, line-buffered input. -W exec file use file as program as well as last option. -W random=number set initial random seed. -W sprintf=number adjust size of sprintf buffer. -W posix_space do not consider "\n" a space. -W usage show this message and exit.
odmiany
[edytuj]awk [options] input_file
awk [options] -f source_file input_file
gdzie:
- source_file to plik z kodem awk, np a.awk
- input_file to plik do przetworzenia
awk options 'selection_criteria {action }' input_file > output_file
Opcje
[edytuj]Opcje
- z 2 myślnikami (działają tylko w gawk)
- z 1 myślnikiem
Podstawowe:
-f program_file : wczytuje program AWK ( source_file lub program_file) z pliku zamiast zamiast z pierwszego argumentu wiersza poleceń -F fs : używa fs jako separatora pól
wersja
[edytuj]awk -W version
wynik:
mawk 1.3.4 20200120 Copyright 2008-2019,2020, Thomas E. Dickey Copyright 1991-1996,2014, Michael D. Brennan random-funcs: srandom/random regex-funcs: internal compiled limits: sprintf buffer 8192 maximum-integer 2147483647
Położenie programu:
which mawk
Przykładowy wynik:
/usr/bin/mawk
bloki
[edytuj]awk: 'BEGIN {start_action} {akcja} END {stop_action}' input_file
Inaczej :
awk BEGIN { initializations } search pattern 1 { program actions } search pattern 2 { program actions } ... END { final actions } input_file
funkcje
[edytuj]bez pliku wejściowego
[edytuj]awk 'program'
awk '{ print }'
aby zakończyć naciśnij Ctrl-D
zmienne
[edytuj]Następujące zmienne są wbudowane i inicjowane przed wykonaniem programu.
- ARGC liczba argumentów wiersza poleceń.
- ARGV tablica argumentów wiersza poleceń, 0..ARGC-1.
- CONVFMT Format do wewnętrznej konwersji liczb na łańcuch, początkowo = „%.6g”.
- ENVIRON Tablica indeksowana przez zmienne środowiskowe. Łańcuch środowiskowy var=value jest przechowywany jako ENVIRON[var] = value.
- FILENAME nazwa bieżącego pliku wejściowego.
- FNR Bieżący numer rekordu w FILENAME.
- FS dzieli rekordy na pola jako wyrażenie regularne.
- NF liczba pól w bieżącym rekordzie.
- NR Numer bieżącego rekordu w całkowitym strumieniu wejściowym.
- OFMT Format do drukowania liczb; początkowo = "%.6g".
- OFS wstawiony między pola na wyjściu, początkowo = " ".
- ORS kończy każdy rekord na wyjściu, początkowo = "\n".
- RLENGTH długość ustawiona przez ostatnie wywołanie wbudowanej funkcji match().
- RS Separator rekordów wejściowych, początkowo = "\n".
- RSTART indeksustawiony przez ostatnie wywołanie match().
- SUBSEP używany do tworzenia wielu indeksów tablicy, początkowo = "\034"
Przykłady
[edytuj]podstawowe ( domyślne) zachowanie
[edytuj]Drukuje plik:
awk '{print}' a.txt
Konwersja postaci wykładniczej do zmiennoprzecinkowej
[edytuj]Przykład: [2]
awk '{ print +$1 }' <<< '54321e+13' 543210000000000000
lub [3]
echo "5.083E-5" | awk -F"E" 'BEGIN{OFMT="%10.10f"} {print $1 * (10 ^ $2)}' 0.0000508300
Pomoc
[edytuj]Online
man mawk