Angielskifrancuskihiszpański

Ulubiona usługa OnWorks

runawk - Online w chmurze

Uruchom runawk u dostawcy bezpłatnego hostingu OnWorks przez Ubuntu Online, Fedora Online, emulator online Windows lub emulator online MAC OS

Jest to polecenie runawk, które można uruchomić u dostawcy bezpłatnego hostingu OnWorks przy użyciu jednej z naszych wielu bezpłatnych stacji roboczych online, takich jak Ubuntu Online, Fedora Online, emulator online systemu Windows lub emulator online systemu Mac OS

PROGRAM:

IMIĘ


runawk - wrapper dla interpretera AWK

STRESZCZENIE


biegacz [opcje] plik programu

biegacz -e program

MOTYWACJA


Po latach używania AWK do programowania stwierdziłem, że pomimo jego prostoty i
ograniczenia AWK jest wystarczająco dobry do pisania skryptów wielu różnych zadań. AWK nie jest
tak potężny, jak ich większe odpowiedniki, takie jak Perl, Ruby, TCL i inne, ale ma swoje
własne zalety, takie jak zwartość, prostota i dostępność na prawie wszystkich systemach UNIX
systemy. Osobiście podoba mi się również jego charakter oparty na danych i orientacja na tokeny, bardzo przydatne
techniki narzędzi do przetwarzania tekstu.

Niestety interpreterom awk brakuje niektórych ważnych funkcji i czasami nie działają tak, jak
dobrze, jak mogli.

Problemy, które widzę (niektóre z nich oczywiście)

1.
AWK nie obsługuje modułów. Nawet jeśli tworzę małe programy, często chcę używać
funkcje utworzone wcześniej i używane już w innych skryptach. Oznacza to, że byłoby wspaniale
organizować funkcje w tzw. biblioteki (moduły).

2.
Aby przekazać argumenty do "#!/usr/bin/awk -f" skrypt (nie do interpretera awk), jest
konieczne jest poprzedzenie listy argumentów znakiem -- (dwa znaki minus). Moim zdaniem to
źle wygląda. Również takie zachowanie narusza POSIX/SUS „Wytyczne dotyczące składni narzędzi”.

Przykład:

program_awk:

#!/usr/bin/awk -f

ZACZYNAĆ {
dla (i=1; i < ARGC; ++i){
printf "ARGV [%d]=%s\n", i, ARGV [i]
}
}

Sesja powłoki:

% program_awk --opt1 --opt2
/usr/bin/awk: nieznana opcja --opt1 zignorowana

/usr/bin/awk: nieznana opcja --opt2 zignorowana

% awk_program -- --opt1 --opt2
ARGV [1]=--opcja1
ARGV [2]=--opcja2
%

W mojej opinii program_awk skrypt powinien działać w ten sposób

% program_awk --opt1 --opt2
ARGV [1]=--opcja1
ARGV [2]=--opcja2
%

3.
Kiedy "#!/usr/bin/awk -f" skrypt obsługuje argumenty (opcje) i chce czytać z
stdin, konieczne jest jawne dodanie /dev/stdin (lub `-') jako ostatniego argumentu.

Przykład:

program_awk:

#!/usr/bin/awk -f

ZACZYNAĆ {
if (ARGV [1] == "--flaga"){
flaga = 1
ARGV [1] = "" #, aby nie czytać pliku o nazwie "--flag"
}
}

{
drukuj „flaga=” flaga” 0=0 zł
}

Sesja powłoki:

% test echa | awk_program -- --flaga
% test echa | awk_program -- --flag /dev/stdin
flaga=1 $0=test
%

idealnie program_awk powinno tak działać

% test echa | awk_program --flaga
flaga=1 $0=test
%

4.
igać(1), który jest dostarczany z GNU awk, nie może być używany w shebang. Na większości (wszystkich?)
Skrypty uniksowe zaczynające się od

#!/usr/local/bin/igawk -f

nie będzie działać.

biegacz została stworzona, aby rozwiązać wszystkie te problemy

OPCJE


-d Włącz tryb debugowania.

-e program
Określ program. Gdyby -e nie określono, kod AWK jest odczytywany z plik programu.

-f moduł_awk
Aktywuj moduł_awk. Działa to tak samo jak

#użyj "awk_module.awk"

dyrektywy w kodzie. Wiele -f opcje są dozwolone.

-F fs Ustaw separator pól wejściowych FS na wyrażenie regularne fs.

-h Wyświetl informacje pomocy.

-t Jeśli ta opcja jest zastosowana, katalog tymczasowy jest tworzony przez biegacz i droga do niego
jest przekazywane do Awk proces potomny. Katalog tymczasowy jest tworzony pod
${RUNAWK_TMPDIR} (jeśli jest ustawione) lub ${TMPDIR} (jeśli jest ustawione) lub / Tmp katalog
Inaczej. Gdyby #posługiwać się "tmpplik.awk" wykryto w programie ta opcja jest włączona
automatycznie.

-T Ustaw FS na znak TAB. To jest równoważne -F'\t'

-V Wyświetl informacje o wersji.

-v było=val
Przypisz wartość val do zmiennej było przed rozpoczęciem wykonywania programu.

SZCZEGÓŁY/WEWNĘTRZNE


Standalone scenariusz
Pod systemami UNIX-podobnymi możesz używać biegacz rozpoczynając skrypt od

#!/usr/local/bin/uruchom

linia lub coś takiego zamiast

#!/usr/bin/awk -f

lub podobne.

AWK Moduły
Aby aktywować moduły, należy je dodać do skryptu awk w ten sposób

#użyj "modul1.awk"
#użyj "modul2.awk"

czyli linia określająca nazwę modułu jest traktowana jako linia komentarza przez normalne AWK
tłumacz, ale jest przetwarzany przez biegacz szczególnie.

Chyba że uciekniesz biegacz z opcją -e, #posługiwać się musi zaczynać się od kolumny 0, czyli bez spacji lub
Symbole tabulatorów są dozwolone przed nim i żadne symbole nie są dozwolone między # i posługiwać się.

Zauważ też, że moduły AWK mogą również "używać" innych modułów i tak dalej. Wszystkie one są
zebrane w kolejności w głąb, a każdy z nich jest dodawany do listy tłumacza awk
argumenty poprzedzone opcją -f. To jest #posługiwać się dyrektywa *NIE* jest podobna do #zawierać
w języku programowania C kod modułu runawk nie jest wstawiany w miejsce #posługiwać się.
Moduły Runawk są bliższe poleceniu "użyj" Perla. W przypadku wzmianki o jakimś module
więcej niż raz, zostanie do niego dodane tylko jedno -f, tj. duplikaty są usuwane
automatycznie.

Pozycja #posługiwać się dyrektywa w pliku źródłowym ma znaczenie, tzn. wcześniejszy moduł to
wspomniano, dla niego zostanie wygenerowane wcześniejsze -f.

Przykład:

program pliku:
#!/usr/local/bin/uruchom

#użyj "A.awk"
#użyj "B.awk"
#użyj "E.awk"

Kod PROG
...

plik B.awk:
#użyj "A.awk"
#użyj "C.awk"
Kod B
...

plik C.awk:
#użyj "A.awk"
#użyj "D.awk"

Kod C
...

A.awk i D.awk nie zawierają dyrektywy #use

Jeśli biegniesz

runawk prog plik1 plik2

or

/ścieżka/do/pliku prog1 plik2

następujące polecenie

awk -f A.awk -f D.awk -f C.awk -f B.awk -f E.awk -f prog -- plik1 plik2

faktycznie będzie działać.

Możesz to sprawdzić, uruchamiając

runawk -d prog plik1 plik2

Moduł szukanie strategia
Moduły są najpierw przeszukiwane w katalogu, w którym główny program (lub moduł, w którym #use
określono dyrektywę) jest umieszczana. Jeśli go tam nie ma, to środowisko AWKPATH
zmienna jest zaznaczona. AWKPATH przechowuje rozdzieloną dwukropkami listę katalogów wyszukiwania. Wreszcie,
moduł jest przeszukiwany w systemowym katalogu modułów runawk, domyślnie PREFIX/share/runawk ale
można to zmienić w czasie kompilacji.

Można również określić bezwzględną ścieżkę do modułu.

Program as an argument
Jak niektórzy inni tłumacze biegacz można pobrać skrypt z wiersza poleceń w ten sposób

/ścieżka/do/runawk -e '
#użyj "alt_assert.awk"

{
attach($1 >= 0 && $1 <= 10, "Zła wartość: " $1)

# Twój kod poniżej
...
}'

biegacz może być również używany do pisania onelinerów

runawk -f abs.awk -e 'POCZĄTEK {print abs(-1)}'

Wybór a Korzystny AWK interpretator
Z jakiegoś powodu możesz preferować jednego lub drugiego tłumacza AWK. Powodem może być
wydajność dla określonego zadania, przydatne, ale nie standardowe rozszerzenia lub cokolwiek innego. Do
powiedzieć biegacz jakiego interpretera AWK użyć, można użyć #interp Dyrektywy

program pliku:
#!/usr/local/bin/uruchom

#użyj "A.awk"
#użyj "B.awk"

#interp "/usr/pkg/bin/nbawk"

# Twój kod tutaj
...

Należy pamiętać, że #interp Dyrektywa powinna również zaczynać się od kolumny 0, wcześniej nie można używać spacji
to i pomiędzy # i interp.

Czasami sensowne jest również umożliwienie użytkownikom wyboru preferowanego AWK
interpreter bez zmiany kodu źródłowego. w biegacz jest to możliwe za pomocą specjalnego
Dyrektywy #interp-var która ustawia nazwę zmiennej środowiskowej przypisywaną przez użytkownika, która
określa interpreter AWK. Na przykład następujący skrypt

plik foobar:
#!/usr/bin/env biegacz

#interp-var "FOOBAR_AWK"

ZACZYNAĆ {
print "To jest aplikacja FooBar"
}

można uruchomić jako

env FOOBAR_AWK=mawk foobar

lub po prostu

foobar

W pierwszym przypadku mawko będzie używany jako interpreter AWK, w drugim -- domyślny AWK
interpretator.

Korzystanie z Przede wszystkim system został opracowany Moduły tylko
W świecie UNIX powszechną praktyką jest pisanie plików konfiguracyjnych w języku programowania
aplikacji. Oznacza to, że jeśli aplikacja jest napisana w powłoce Bourne, konfiguracja
pliki dla takich aplikacji są często pisane również w Bourne. Używając RunAWK można zrobić
to samo dla aplikacji napisanych w AWK. Na przykład poniższy kod użyje
~/.foobarrc plik, jeśli istnieje, w przeciwnym razie zostanie użyty plik /etc/foobar.conf, jeśli istnieje.

plik foobar:
#!/usr/bin/env biegacz

#bezpieczne użycie "~/.foobarrc" "/etc/foobar.conf"

ZACZYNAĆ {
drukuj foo, bar, baz
}

filet ~/.foobarrc:
ZACZYNAĆ {
foo = "foo10"
słupek = "bar20"
baza = 123
}

Oczywiście, #bezpieczne-użytkowanie Dyrektywa może być również używana do innych celów. #bezpieczne-użytkowanie
dyrektywa akceptuje tyle modułów, ile chcesz, ale co najwyżej jeden można dołączyć za pomocą awk
opcja -f, inne są po cichu ignorowane, zauważ, że moduły są analizowane od lewej do
Prawidłowy. Wiodąca tylda w nazwie modułu jest zastępowana katalogiem domowym użytkownika. Inne
przykład:

plik foobar:
#!/usr/bin/env biegacz

#use "/usr/share/foobar/default.conf"
#bezpieczne użycie "~/.foobarrc" "/etc/foobar.conf"

twój kod jest tutaj

Tutaj ustawienia domyślne są ustawione w /usr/share/foobar/default.conf, a konfiguracja
pliki (jeśli istnieją) są używane do ich zastępowania.

Oprawa środowisko
W niektórych przypadkach możesz chcieć uruchomić interpreter AWK w określonym środowisku. Do
na przykład twój skrypt może być zorientowany na przetwarzanie tylko tekstu ASCII. W takim przypadku możesz biegać
AWK ze środowiskiem LC_CTYPE=C i użyj zakresów wyrażeń regularnych.

biegacz zapewnia #środka dyrektywy w tym zakresie. Ciąg wewnątrz podwójnych cudzysłowów jest przekazywany do
putenv(3) funkcja libc.

Przykład:

program pliku:
#!/usr/local/bin/uruchom

#env "LC_ALL=C"

$1 ~ /^[AZ]+$/ { # AZ jest ważne, jeśli LC_CTYPE=C
wydrukuj 1
}

EXIT STATUS


Jeśli interpreter AWK wychodzi normalnie, biegacz wychodzi ze swoim statusem wyjścia. Jeśli tłumacz AWK
został zabity przez sygnał, biegacz wyjścia ze statusem wyjścia 128+sygnał.

ŚRODOWISKO


ŚCIEŻKA AWK
Lista rozdzielonych dwukropkami katalogów, w których Awk przeszukiwane są moduły.

RUNAWK_AWKPROG
Ustawia ścieżkę do interpretera AWK, używanego domyślnie, tj. ta zmienna nadpisuje
domyślny czas kompilacji. Zauważ, że dyrektywa #interp zastępuje to.

RUNAWK_KEEPTMP
Jeśli jest ustawiona, pliki tymczasowe nie są usuwane.

Korzystaj z runawk online za pomocą usług onworks.net


Darmowe serwery i stacje robocze

Pobierz aplikacje Windows i Linux

Komendy systemu Linux

Ad