runawk è un piccolo wrapper per interprete AWK che impements sistema di moduli e aiuta a scrivere i programmi AWK standalone.
MOTIVAZIONE
Dopo anni di utilizzo di AWK per la programmazione che ho scoperto che, nonostante
la sua semplicità e le limitazioni AWK è abbastanza buono per lo scripting un'ampia
gamma di compiti diversi. AWK non è potente come il loro più grande
controparti come Perl, Ruby, TCL e altri, ma ha il proprio
vantaggi come la compattezza, la semplicità e la disponibilità su quasi tutto
Sistemi UNIX-like. Personalmente, come anche la sua natura data-driven e
orientamento gettone, tecnica molto utile per la semplice elaborazione di testo
utilities.
Ma Comunque! Purtroppo awk interpreti manca di alcune funzionalità importanti e
a volte non funziona buono come whould essere.
Alcuni problemi vedo (alcuni di loro, ovviamente).
1) AWK manca il supporto per i moduli. Anche se creo piccoli programmi, I
spesso vogliono utilizzare le funzioni create in precedenza e già utilizzato in
altri script. Cioè, è whould bello orginise funzioni in
cosiddetto librerie (moduli).
2) Al fine di passare gli argomenti a #! / Usr / bin / awk -f copione (non a awk
interprete), è necessario un elenco di prepand
argomenti con - (due signes minus). A mio parere, questo sembra male.
Esempio:
awk_program:
& Nbsp; & nbsp; & nbsp; #! / Usr / bin / awk -f
& Nbsp; & nbsp; & nbsp; INIZIO {
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; for (i = 1; i
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; }
& Nbsp; & nbsp; & nbsp; }
Shell sessione:
& Nbsp; & nbsp; & nbsp; % Awk_program --opt1 --opt2
& Nbsp; & nbsp; & nbsp; / Usr / bin / awk: sconosciuto opzione --opt1 ignorata
& Nbsp; & nbsp; & nbsp; / Usr / bin / awk: sconosciuto opzione --opt2 ignorata
& Nbsp; & nbsp; & nbsp; % Awk_program - --opt1 --opt2
& Nbsp; & nbsp; & nbsp; ARGV [1] = - opt1
& Nbsp; & nbsp; & nbsp; ARGV [2] = - opt2
& Nbsp; & nbsp; & nbsp; %
A mio parere awk_program script dovrebbe funzionare come questo (come
normali programmi fare)
& Nbsp; & nbsp; & nbsp; % Awk_program --opt1 --opt2
& Nbsp; & nbsp; & nbsp; ARGV [1] = - opt1
& Nbsp; & nbsp; & nbsp; ARGV [2] = - opt2
& Nbsp; & nbsp; & nbsp; %
E 'possibile utilizzare runawk.
3) Quando #! / Usr / bin / awk -f sceneggiatura gestisce gli argomenti (opzioni) e vuole
leggere da stdin, è necessario aggiungere
/ Dev / stdin (o `- '), come ultimo argomento esplicitamente.
Esempio:
awk_program:
& Nbsp; & nbsp; & nbsp; #! / Usr / bin / awk -f
& Nbsp; & nbsp; & nbsp; INIZIO {
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; if (ARGV [1] == "--flag") {
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; bandiera = 1
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; ARGV [1] = "" # per non leggere il file denominato "--flag"
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; }
& Nbsp; & nbsp; & nbsp; }
& Nbsp; & nbsp; & nbsp; {
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; print "flag =" bandiera "$ 0 =" $ 0
& Nbsp; & nbsp; & nbsp; }
Shell sessione:
& Nbsp; & nbsp; & nbsp; % Echo Test | awk_program - --flag
& Nbsp; & nbsp; & nbsp; % Echo Test | awk_program - --flag / dev / stdin
& Nbsp; & nbsp; & nbsp; flag = 1 $ 0 = prova
& Nbsp; & nbsp; & nbsp; %
Idealmente awk_program dovrebbe funzionare come questo
& Nbsp; & nbsp; & nbsp; % Echo test | awk_program --flag
& Nbsp; & nbsp; & nbsp; flag = 1 $ 0 = prova
& Nbsp; & nbsp; & nbsp; %
Tutti questi probles sono risolti con runawk e questo è il motivo per cui l'ho scritto.
Includo anche alcuni moduli runawk di distribuzione che sono
utile per me e spero sarà utile anche per voi.
Installazione
0) BSD make è necessario. I chiamarla semplicemente 'fare', ma il suo vero nome può
& Nbsp; & nbsp; variare. & nbsp; bmake e pmake sono possibili nomi.
& Nbsp; & nbsp; Se è necessario modificare le opzioni predefinite di costruzione,
& Nbsp; & nbsp; eseguire fare come questo
& Nbsp; & nbsp; & nbsp; & nbsp; env [YOUR_ASSIGNMENTS] fare
& Nbsp; & nbsp; Vedere l'esempio seguente sezione
1) tarball Uncompress avete scaricato come questo
& Nbsp; & nbsp; gzip -DC runawk-X-Y-Z.tar.gz | tar -xf-
2) cd runawk-X-Y-Z
3) fare
4) (optional!) Make install-dirs
5) make install
Ci sono un sacco di variabili Makefile che può essere modificata durante
. Installazione & nbsp; Proprie variabili di Runawk (Tutto quello che sono all'inizio di
Makefile):
& Nbsp; PREFIX & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; - Dove runawk è installato
& Nbsp; MODULESDIR & nbsp; & nbsp; & nbsp; & nbsp; - Directory in cui i moduli sono installati a
& Nbsp; AWK_PROG & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; - Percorso di interprete awk
& Nbsp; STDIN_FILENAME - percorso del file di dispositivo stdin
Variabili BSD di make (più comunemente utilizzati,
per tutti gli altri - vedi la documentazione di marca e file .MK)
& Nbsp; BINDIR - dove runawk eseguibile si è installato a
& Nbsp; MANDIR - dove le pagine di manuale sono installati a
& Nbsp; BINOWN - runawk proprietario eseguibile
& Nbsp; BINGRP - runawk gruppo eseguibile
& Nbsp; MANOWN - pagina proprietario man
& Nbsp; MANGRP - Man Group pagina
Esempio:
& Nbsp; & nbsp; env CC = gcc
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; PREFIX = / home / cheusov / locale
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; LDFLAGS = '- L / usr / pkg / lib -Wl, -rpath -Wl, / usr / pkg / lib'
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; LDADD = -lextralib
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; CFLAGS = '- Werror -Wall'
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; CPPFLAGS = -I / usr / pkg / include
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; BINOWN = cheusov
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; BINGRP = utenti
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; MANOWN = cheusov
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; MANGRP = utenti
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; MKCATPAGES = no
& Nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; fare -s tutto install-dirs install
Cosa c'è di nuovo in questa versione:
- Le opzioni -i, -I, e tutte le opzioni lunghe sono state completamente rimosse.
- Il -T opzione è stata aggiunta per l'ingresso a schede.
- L'opzione -v è documentato nella pagina man.
- Correzioni per avvertimenti gcc compilazione.
- Correzioni per la compilazione con MAKEOBJDIR non vuota.
- correzioni Typo in nuovi, runcmd.awk e pagine man.
Cosa c'è di nuovo nella versione 1.4.4:
- Un bug nel rimuovere le sottodirectory in una directory temporanea era fisso.
- Miglioramenti per runawk_modules.3.
Cosa c'è di nuovo nella versione 1.4.3:
- (1) non utilizzare il sistema paexec
( 3) più per rimuovere la directory temporanea.
- Il print_help funzione () è stato spostato dal modulo power_getopt.awk di init_getopt.awk.
Cosa c'è di nuovo nella versione 1.4.2:
- Questa versione aggiunge runawk_modules.3 dove tutti i moduli sono documentata, disapprova opzioni lunghe, rimuove le opzioni -i e -I, e include le pagine man del tarball di distribuzione in modo pod2man non è necessaria per la costruzione.
Cosa c'è di nuovo nella versione 1.4.0:
- In exitnow.awk, lo exitnow (stato) Funzione ora termina l'esecuzione dello script senza correre sezioni terminali, anche se lo stato == 0.
- Il nuovo modulo io.awk include le funzioni is_ {file, dir, exec, socket, fifo, blockdev, chardev, link simbolico}, file_size, e file_type. tokenre.awk ha la nuova funzione splitre0 ().
Cosa c'è di nuovo nella versione 1.3.2:
- array interni sono ora trasferiti automaticamente. Questo risolve uso di runawk (1), in combinazione con xargs (1), ad esempio, cat files.txt |. Xargs runawk -e '...'
Cosa c'è di nuovo nella versione 1.3.0:
- Una correzione per un messaggio di avviso del compilatore Intel C.
- Una correzione per il shquote funzione () dai moduli / shquote.awk.
- Il codice sorgente del progetto è stata riorganizzata, permettendo così una facile installazione di qualsiasi sottoprogetto:. Esempi, moduli, runawk, alt_getopt, e Doc (TODO, README, ecc file)
Cosa c'è di nuovo nella versione 1.1.0:
- È stata aggiunta una opzione -F
- Nuove ord.awwas ftrans_in.awk, e moduli glob.awk sono stati inclusi.
- Un nuovo eseguibile alt_getopt è stata inclusa per il parsing opzioni corte e lunghe in script di shell.
- Nuovo min3, MIN4, min5, min_key, MIN_VALUE, e key_of_min_value (min.awk), e max3, Max4, MAX5, max_key, max_value, e key_of_max_value stati forniti funzioni (max.awk).
- sono stati aggiunti nuovi campioni:. Esempi / demo_minmax, esempi / demo_tokenre3, esempi / demo_ftrans, examples / demo_glob *
- Una nuova funzionalità è stata aggiunta in multisub.awk.
- Piccoli miglioramenti sono stati fatti nella procedura di installazione.
Cosa c'è di nuovo in versione 0.16.0:
- Un sacco di programmi dimostrativi per la maggior parte dei moduli sono stati creati runawk e sono in esempi / sottodirectory momento. Nuovo modulo MEGA;-) power_getopt.awk vedere gli esempi di documentazione e di programmi demo / demo_power_getopt. Rende opzioni di gestione davvero facile. Nuovi moduli: embed_str.awk has_suffix.awk has_prefix.awk readfile.awk modinfo.awk correzioni minori e miglioramenti in dirname.awk e basename.awk. Ora sono pienamente compatibili con dirname (1) e basename (1) RUNAWK imposta le seguenti variabili di ambiente per il sottoprocesso awk bambino: RUNAWK_MODC - Un certo numero di moduli (-f nomefile) passato a AWK RUNAWK_MODV_ - Percorso completo del modulo di #n , dove n è in [0..RUNAWK_MODC) gamma. RUNAWK imposta variabile di ambiente RUNAWK_ART_STDIN per il sottoprocesso awk bambino a 1 se aggiuntive / artificiale `- 'è stato aggiunto alla lista di argomenti di awk. Makefile: bmake-ismo sono stati rimossi. Ora Makefile è pienamente compatibile con FreeBSD make. Bersaglio CleanFiles viene usato al posto di regole fatte a mano fix minori in target 'test_all'
I commenti non trovato