Przejdź do zawartości

Programowanie w systemie UNIX/awk

Z Wikibooks, biblioteki wolnych podręczników.

AWK

  • 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

Żródła

[edytuj]
  1. isolution.pro: awk-workflow
  2. How to get bc to handle numbers in scientific (aka exponential) notation?
  3. how to use bc to handle numbers in scientific/exponential notation?