Nome
gawk - linguaggio di scansione ed elaborazione del modello
Sinossi
guardare con aria sciocca Opzioni di stile POSIX o GNU -f programma di file -- file …guardare con aria sciocca Opzioni di stile POSIX o GNU -- program-text file … pgawk Opzioni di stile POSIX o GNU -f programma di file -- file …pgawk Opzioni di stile POSIX o GNU -- program-text file … allocco è l'implementazione del linguaggio di programmazione AWK da parte del progetto GNU. È conforme alla definizione della lingua in POSIX 1003.2 Command Language and Utilities Standard. Questa versione a sua volta è basata sulla descrizione in Il linguaggio di programmazione AWK , di Aho, Kernighan e Weinberger, con le funzionalità aggiuntive presenti nella versione System V Release 4 di UNIX awk . allocco fornisce anche Bell recenti Laboratori awk estensioni e un numero di estensioni specifiche per GNU. pgawk è la versione di profilazione di guardare con aria sciocca . È identico in tutti i modi a guardare con aria sciocca , eccetto che i programmi girano più lentamente e automaticamente produce un profilo di esecuzione nel file awkprof.out quando fatto. Vedere il --profilo opzione, sotto. La riga di comando è composta da opzioni a guardare con aria sciocca stesso, il testo del programma AWK (se non fornito tramite il -f o --file opzioni) e i valori da rendere disponibili in ARGC e ARGV variabili AWK predefinite. allocco le opzioni possono essere opzioni POSIX a lettera singola o opzioni lunghe stile GNU. Le opzioni POSIX iniziano con un singolo `` - '', mentre le opzioni lunghe iniziano con `` - ''. Sono disponibili opzioni lunghe per entrambe le funzioni specifiche di GNU e per le funzioni con POSIX. Seguendo lo standard POSIX, guardare con aria sciocca -le opzioni specifiche sono fornite tramite argomenti al -W opzione. multiplo -W le opzioni possono essere fornite Ciascuno -W l'opzione ha un'opzione lunga corrispondente, come indicato di seguito. Gli argomenti delle opzioni lunghe sono uniti all'opzione da un = firmare, senza spazi intermedi, o possono essere forniti nel successivo argomento della riga di comando. Le opzioni lunghe possono essere abbreviate, a condizione che l'abbreviazione rimanga unica. allocco accetta le seguenti opzioni, elencate in ordine alfabetico. -F fs --field-separatore fs Uso fs per il separatore del campo di input (il valore del FS variabile predefinita). -v var = val --assegnare var = val Assegna il valore val alla variabile var , prima che inizi l'esecuzione del programma. Tali valori variabili sono disponibili per INIZIO blocco di un programma AWK. -f programma di file --file programma di file Leggi l'origine del programma AWK dal file programma di file , anziché dal primo argomento della riga di comando. multiplo -f (o --file) possono essere usate opzioni. -mf NNN -Sig NNN Imposta vari limiti di memoria sul valore NNN . Il f flag imposta il numero massimo di campi, e il r flag imposta la dimensione massima del record. Queste due bandiere e il -m l'opzione proviene dalla versione di ricerca UNIX di Bell Laboratories awk . Sono ignorati da guardare con aria sciocca , da guardare con aria sciocca non ha limiti predefiniti. -W compat -W tradizionale --compat --tradizionale Correre in Compatibilità modalità. In modalità compatibilità, guardare con aria sciocca si comporta in modo identico a UNIX awk ; nessuna delle estensioni specifiche per GNU è riconosciuta. L'uso di --tradizionale è preferito rispetto alle altre forme di questa opzione. Vedere ESTENSIONI GNU, sotto, per maggiori informazioni. -W copyleft -W copyright --copyleft --diritto d'autore Stampare la versione breve del messaggio di informazioni sul copyright GNU sullo standard output e uscire correttamente. -W Dump-variabili= file --dump-variabili= file Stampa un elenco ordinato di variabili globali, i loro tipi e i valori finali a file . Se no file è fornito, guardare con aria sciocca usa un file chiamato awkvars.out nella directory corrente. Avere una lista di tutte le variabili globali è un buon modo per cercare errori tipografici nei tuoi programmi. Si utilizzerà anche questa opzione se si dispone di un programma di grandi dimensioni con molte funzioni e si desidera essere sicuri che le proprie funzioni non utilizzino inavvertitamente variabili globali che si intende essere locali. (Questo è un errore particolarmente facile da fare con nomi di variabili semplici come io, j, e così via.) -Aiuto -W utilizzo --Aiuto --usage Stampa un riepilogo relativamente breve delle opzioni disponibili sullo standard output. (Per il Norme di codifica GNU , queste opzioni causano un'uscita immediata e di successo.) -W lint= fatale --lint= fatale Fornire avvertimenti su costrutti che sono dubbi o non portabili ad altre implementazioni di AWK. Con un argomento facoltativo di fatalegli avvertimenti sui pelucchi diventano errori fatali. Questo potrebbe essere drastico, ma il suo utilizzo sicuramente incoraggerà lo sviluppo di programmi AWK più puliti. -W un po 'vecchio --lint-old Fornire avvertimenti su costrutti che non sono portabili alla versione originale di Unix awk . -W gen-po --gen-po Analizza e analizza il programma AWK e genera un GNU .po formattare il file sullo standard output con le voci per tutte le stringhe localizzabili nel programma. Il programma stesso non viene eseguito. Vedi il GNU gettext distribuzione per maggiori informazioni su .po File. -W dati non decimali --non-decimale dati Riconoscere i valori ottali ed esadecimali nei dati di input. Usa questa opzione con molta cautela! -W posix --posix Questo si accende Compatibilità modalità, con le seguenti restrizioni aggiuntive: * X le sequenze di escape non sono riconosciute. * Solo lo spazio e la tabulazione fungono da separatori di campo quando FS è impostato su un singolo spazio, newline no. * Non è possibile continuare le righe dopo ? e :. * Il sinonimo func per la parola chiave funzione non è riconosciuto. * Gli operatori ** e **= non può essere usato al posto di ^ e ^=. * Il fflush () la funzione non è disponibile. -W profilo= prof_file --profilo= prof_file Invia dati di profilatura a prof_file . L'impostazione predefinita è awkprof.out. Quando corri con guardare con aria sciocca , il profilo è solo una versione `` carina stampata '' del programma. Quando corri con pgawk , il profilo contiene i conteggi di esecuzione di ciascuna istruzione nel programma nel margine sinistro e i conteggi delle chiamate di funzione per ogni funzione definita dall'utente. -W re-intervallo --re-intervallo Abilita l'uso di espressioni di intervallo nella corrispondenza delle espressioni regolari (vedi Espressioni regolari, sotto). Le espressioni intervallate non erano tradizionalmente disponibili nella lingua AWK. Lo standard POSIX li ha aggiunti, da fare awk e egrep coerenti tra loro. Tuttavia, è probabile che il loro utilizzo interrompa i vecchi programmi AWK guardare con aria sciocca li fornisce solo se vengono richiesti con questa opzione o quando --posix è specificato. -W fonte program-text --fonte program-text Uso program-text come codice sorgente del programma AWK. Questa opzione consente di mescolare facilmente le funzioni della libreria (utilizzate tramite -f e --file opzioni) con il codice sorgente inserito sulla riga di comando. È inteso principalmente per i programmi AWK medio-grandi utilizzati negli script di shell. -W versione --versione Stampa le informazioni sulla versione per questa particolare copia di guardare con aria sciocca sullo standard output. Questo è utile principalmente per sapere se la copia corrente di guardare con aria sciocca sul tuo sistema è aggiornato rispetto a quanto la Free Software Foundation sta distribuendo. Questo è utile anche quando si riportano bug. (Per il Norme di codifica GNU , queste opzioni causano un'uscita immediata e di successo.) -- Segnala la fine delle opzioni. Questo è utile per consentire ulteriori argomenti al programma AWK stesso per iniziare con un `` - ''. Questo è principalmente per coerenza con la convenzione di analisi degli argomenti usata dalla maggior parte degli altri programmi POSIX. In modalità compatibilità, tutte le altre opzioni sono contrassegnate come non valide, ma vengono altrimenti ignorate. Durante il normale funzionamento, fino a quando il testo del programma è stato fornito, le opzioni sconosciute vengono passate al programma AWK nel ARGV array per l'elaborazione. Ciò è particolarmente utile per l'esecuzione di programmi AWK tramite il meccanismo dell'interprete eseguibile "#!". ESECUZIONE DEL PROGRAMMA AWK Un programma AWK consiste in una sequenza di istruzioni di pattern-action e definizioni di funzioni opzionali. modello { dichiarazioni d'azione }funzione nome ( lista dei parametri ) { dichiarazioni }
allocco prima legge la sorgente del programma da programma di file (s) se specificato, da argomenti a --fonte, o dal primo argomento non opzionale sulla riga di comando. Il -f e --fonte le opzioni possono essere utilizzate più volte sulla riga di comando. allocco legge il testo del programma come se tutto il programma di file s e i testi sorgente della riga di comando erano stati concatenati insieme. Questo è utile per creare librerie di funzioni AWK, senza doverle includere in ogni nuovo programma AWK che le utilizza. Fornisce inoltre la possibilità di combinare le funzioni della libreria con i programmi della riga di comando. La variabile di ambiente AWKPATH specifica un percorso di ricerca da utilizzare per trovare i file di origine con il nome -f opzione. Se questa variabile non esiste, il percorso predefinito è":. / Usr / local / share / awk". (La directory attuale può variare a seconda di come guardare con aria sciocca è stato creato e installato.) Se il nome del file è stato assegnato a -f l'opzione contiene un carattere `` / '', nessuna ricerca di percorso viene eseguita. allocco esegue i programmi AWK nel seguente ordine. Innanzitutto, tutte le assegnazioni di variabili specificate tramite -v l'opzione viene eseguita. Il prossimo, guardare con aria sciocca compila il programma in una forma interna. Poi, guardare con aria sciocca esegue il codice nel INIZIO blocco (s) (se presente), e quindi procede a leggere ogni file denominato nel ARGV array. Se non ci sono file chiamati sulla riga di comando, guardare con aria sciocca legge lo standard input. Se un nome file sulla riga di comando ha il modulo var = val è trattato come un incarico variabile. La variabile var sarà assegnato il valore val . (Questo succede dopo qualsiasi INIZIO i blocchi sono stati eseguiti.) L'assegnazione della variabile da riga di comando è molto utile per assegnare in modo dinamico valori alle variabili che AWK usa per controllare come l'input è suddiviso in campi e record. È anche utile per controllare lo stato se sono necessari più passaggi su un singolo file di dati. Se il valore di un particolare elemento di ARGV è vuoto (''), guardare con aria sciocca salta sopra Per ogni record nell'input, guardare con aria sciocca prova per vedere se corrisponde a qualsiasi modello nel programma AWK. Per ogni modello che corrisponde al record, l'associato azione viene eseguito. I modelli sono testati nell'ordine in cui si verificano nel programma. Infine, dopo che tutto l'input è esaurito, guardare con aria sciocca esegue il codice nel FINE blocco (i) (se presente). Le variabili AWK sono dinamiche; vengono alla luce quando vengono usati per la prima volta. I loro valori sono numeri in virgola mobile o stringhe o entrambi, a seconda di come vengono utilizzati. AWK ha anche matrici unidimensionali; si possono simulare array con più dimensioni. Diverse variabili predefinite sono impostate come esecuzione di un programma; questi saranno descritti come necessari e riepilogati di seguito. Normalmente, i record sono separati da caratteri di nuova riga. È possibile controllare il modo in cui i record vengono separati assegnando valori alla variabile incorporata RS. Se RS è un singolo carattere, quel carattere separa i record. Altrimenti, RS è un'espressione regolare. Il testo nell'input che corrisponde a questa espressione regolare separa il record. Tuttavia, in modalità di compatibilità, solo il primo carattere del suo valore di stringa viene utilizzato per separare i record. Se RS è impostato sulla stringa nulla, quindi i record sono separati da righe vuote. quando RS è impostato sulla stringa nulla, il carattere di nuova riga funge sempre da separatore di campo, oltre a qualsiasi valore FS potrebbe avere. Come ogni record di input viene letto, guardare con aria sciocca divide il record in i campi , usando il valore del FS variabile come separatore di campo. Se FS è un singolo carattere, i campi sono separati da quel carattere. Se FS è la stringa nulla, quindi ogni singolo carattere diventa un campo separato. Altrimenti, FS dovrebbe essere un'espressione regolare completa. Nel caso speciale che FS è un singolo spazio, i campi sono separati da serie di spazi e / o tabulazioni e / o newline. (Ma vedi la discussione di --posix, sotto). NOTA: Il valore di IGNORECASE (vedi sotto) influisce anche su come i campi vengono divisi quando FS è un'espressione regolare e in che modo i record vengono separati quando RS è un'espressione regolare. Se la FIELDWIDTHS la variabile è impostata su una lista di numeri separati da spazi, ogni campo dovrebbe avere larghezza fissa, e guardare con aria sciocca divide il record usando le larghezze specificate. Il valore di FS è ignorato Assegnare un nuovo valore a FS sovrascrive l'uso di FIELDWIDTHSe ripristina il comportamento predefinito. Ogni campo nel record di input può essere referenziato dalla sua posizione, $1, $2, e così via. $0 è l'intero record. I campi non devono essere referenziati da costanti: n = 5stampa $ n stampa il quinto campo nel record di input. La variabile NF è impostato sul numero totale di campi nel record di input. Riferimenti a campi inesistenti (cioè campi dopo $ NF) produce la stringa nulla. Tuttavia, assegnando a un campo inesistente (ad es. $ (NF + 2) = 5) aumenta il valore di NFcrea qualsiasi campo intermedio con la stringa nulla come valore e causa il valore di $0 da ricalcolare, con i campi separati dal valore di OFS. I riferimenti ai campi numerati negativi causano un errore fatale. decrementare NF causa la perdita dei valori dei campi oltre il nuovo valore e il valore di $0 da ricalcolare, con i campi separati dal valore di OFS. Assegnare un valore a un campo esistente fa ricostruire l'intero record quando $0 è referenziato. Allo stesso modo, assegnando un valore a $0 causa la resplit del record, creando nuovi valori per i campi. allocco Le variabili built-in sono: ARGC Il numero di argomenti della riga di comando (non include le opzioni per guardare con aria sciocca o la fonte del programma). ARGIND L'indice in ARGV del file corrente in fase di elaborazione. ARGV Matrice di argomenti della riga di comando. L'array è indicizzato da 0 a ARGC - 1. Modifica dinamica dei contenuti di ARGV può controllare i file usati per i dati. binmode Su sistemi non POSIX, specifica l'uso della modalità `` binary '' per tutti i file I / O. I valori numerici 1, 2 o 3 specificano che i file di input, i file di output o tutti i file, rispettivamente, devono utilizzare I / O binari. Valori di stringa di "R", o "W" specificare che i file di input, o i file di output, rispettivamente, dovrebbero usare I / O binari. Valori di stringa di "Rw" o "Wr" specificare che tutti i file devono utilizzare I / O binari. Qualsiasi altro valore di stringa viene trattato come "Rw", ma genera un messaggio di avviso. CONVFMT Il formato di conversione per i numeri, "% .6g", per impostazione predefinita. ENVIRON Una matrice contenente i valori dell'ambiente corrente. La matrice è indicizzata dalle variabili di ambiente, ogni elemento è il valore di quella variabile (ad es.ENVIRON "HOME" potrebbe essere / Home / arnold). La modifica di questo array non influisce sull'ambiente visto dai programmi che guardare con aria sciocca spawn via reindirizzamento o il sistema()funzione. ERRNO Se si verifica un errore di sistema o facendo un reindirizzamento per getline, durante una lettura per getlineo durante a vicino(), poi ERRNO conterrà una stringa che descrive l'errore. Il valore è soggetto a traduzione in locali non inglesi. FIELDWIDTHS Un elenco di spazi vuoti separato da spazi bianchi. Quando impostato, guardare con aria sciocca analizza l'input in campi di larghezza fissa, invece di utilizzare il valore di FS variabile come separatore di campo. NOME DEL FILE Il nome del file di input corrente.Se nessun file è specificato sulla riga di comando, il valore di NOME DEL FILE è `` - ''. Però, NOME DEL FILE è indefinito all'interno del INIZIO blocco (a meno che non sia impostato da getline). FNR Il numero del record di input nel file di input corrente. FS Il separatore del campo di input, uno spazio per impostazione predefinita. Vedere campi, sopra. IGNORECASE Controlla la distinzione tra maiuscole e minuscole di tutte le espressioni regolari e le operazioni con le stringhe. Se IGNORECASE ha un valore diverso da zero, quindi confronti tra stringhe e corrispondenza del modello nelle regole, divisione del campo con FS, registrare separando con RS, espressione regolare corrispondente a ~e !~, e il gensub (), gsub (), indice(), incontro(), Diviso(), e sub() tutte le funzioni integrate ignorano le maiuscole e minuscole quando eseguono operazioni con espressioni regolari. NOTA: La sottoscrizione di matrice è non influenzato, né è il asort () funzione. Quindi, se IGNORECASE non è uguale a zero, / AB / corrisponde a tutte le stringhe "Ab", "AB","Ab", e "AB". Come con tutte le variabili AWK, il valore iniziale di IGNORECASE è zero, quindi tutte le espressioni regolari e le operazioni sulle stringhe sono normalmente sensibili al maiuscolo / minuscolo. Sotto Unix, l'intero set di caratteri ISO 8859-1 Latin-1 viene utilizzato quando si ignora il caso. LINT Fornisce il controllo dinamico del --lint opzione all'interno di un programma AWK. Quando è vero, guardare con aria sciocca stampa avvisi di lanugine. Quando è falso, non è così. Quando viene assegnato il valore di stringa "fatale"Gli avvertimenti sui pelucchi diventano errori fatali, esattamente come --lint = fatale. Qualsiasi altro valore reale stampa solo gli avvisi. NF Il numero di campi nel record di input corrente. NR Il numero totale di record di input visti finora. OFMT Il formato di output per i numeri, "% .6g", per impostazione predefinita. OFS Il separatore dei campi di output, uno spazio per impostazione predefinita. ORS Il separatore del record di output, per impostazione predefinita una nuova riga. procinfo Gli elementi di questo array forniscono l'accesso alle informazioni sul programma AWK in esecuzione. Su alcuni sistemi, ci possono essere elementi nella matrice, "gruppo 1" attraverso "gruppo n ' per alcuni n , che è il numero di gruppi supplementari che il processo ha. Utilizzare il nel operatore per testare questi elementi. I seguenti elementi sono garantiti per essere disponibili: Procinfo "egid" il valore del getegid (2) chiamata di sistema. Procinfo "euid" il valore del geteuid (2) chiamata di sistema. Procinfo "FS" "FS" se il campo si divide con FS è in effetti, o "FIELDWIDTHS" se il campo si divide con FIELDWIDTHS è in vigore. Procinfo "gid" il valore del getgid (2) chiamata di sistema. Procinfo "pgrpid" l'ID del gruppo di processi del processo corrente. Procinfo "pid" l'ID di processo del processo corrente. Procinfo "PPID" l'ID del processo genitore del processo corrente. Procinfo "uid" il valore del getuid (2) chiamata di sistema. RS Il separatore del record di input, di default una nuova riga. RT Il terminatore del record. allocco imposta RT al testo di input che corrisponde al carattere o all'espressione regolare specificata da RS. RSTART L'indice del primo carattere abbinato a incontro(); 0 se nessuna corrispondenza. (Ciò implica che gli indici dei caratteri iniziano da uno.) RLENGTH La lunghezza della stringa corrispondente incontro(); -1 se nessuna corrispondenza. SUBSEP Il carattere utilizzato per separare più indici negli elementi dell'array, per impostazione predefinita ' 034'. DOMINIOTESTO Il dominio di testo del programma AWK; usato per trovare le traduzioni localizzate per le stringhe del programma. Gli array sono pedici con un'espressione tra parentesi quadre ( e ). Se l'espressione è una lista di espressioni ( espr , espr …) quindi l'indice di matrice è una stringa che consiste nella concatenazione del valore (stringa) di ogni espressione, separato dal valore del SUBSEP variabile. Questa funzione viene utilizzata per simulare array con dimensioni multiple. Per esempio: i = "A"; j = "B"; k = "C"x i, j, k = "ciao, mondo n" assegna la stringa "ciao, mondo n" all'elemento dell'array X che è indicizzato dalla stringa"A 034B 034C". Tutti gli array in AWK sono associativi, ovvero indicizzati in base a valori stringa. L'operatore speciale nel può essere usato in un Se o mentre dichiarazione per vedere se una matrice ha un indice costituito da un valore particolare. se la matrice di stampa (val in array) val Se la matrice ha più indici, utilizzare (i, j) in serie. Il nel il costrutto può anche essere usato in a per loop per scorrere tutti gli elementi di un array. Un elemento può essere cancellato da un array usando il Elimina dichiarazione. Il Elimina istruzione può anche essere usata per cancellare l'intero contenuto di un array, semplicemente specificando il nome dell'array senza un pedice. Le variabili e i campi possono essere numeri (in virgola mobile) o stringhe o entrambi. Il modo in cui il valore di una variabile viene interpretato dipende dal suo contesto. Se usato in un'espressione numerica, verrà trattato come un numero, se usato come stringa verrà trattato come una stringa. Per forzare una variabile da trattare come un numero, aggiungere 0 a essa; per forzarlo a essere trattato come una stringa, concatenarlo con la stringa nulla. Quando una stringa deve essere convertita in un numero, la conversione viene eseguita utilizzando strtod (3). Un numero viene convertito in una stringa utilizzando il valore di CONVFMT come una stringa di formato per sprintf (3), con il valore numerico della variabile come argomento. Tuttavia, anche se tutti i numeri in AWK sono a virgola mobile, i valori interi lo sono sempre convertiti come numeri interi. Così, dato CONVFMT = "% 2.2f" a = 12 b = a "" la variabile B ha un valore stringa di '12' e non '12.00'. allocco esegue confronti come segue: Se due variabili sono numeriche, vengono confrontate numericamente. Se un valore è numerico e l'altro ha un valore stringa che è una `` stringa numerica '', allora anche i confronti vengono eseguiti numericamente. In caso contrario, il valore numerico viene convertito in una stringa e viene eseguito un confronto tra stringhe. Due stringhe vengono confrontate, ovviamente, come stringhe. Notare che lo standard POSIX applica il concetto di `` stringa numerica '' ovunque, anche alle costanti di stringa. Tuttavia, questo è chiaramente errato e guardare con aria sciocca non lo fa (Fortunatamente, questo è stato risolto nella prossima versione dello standard.) Si noti che le costanti di stringa, come ad esempio '57', siamo non stringhe numeriche, sono costanti stringa. L'idea di `` stringa numerica '' si applica solo ai campi, getline ingresso, NOME DEL FILE, ARGV elementi, ENVIRON elementi e gli elementi di una matrice creata da Diviso() che sono stringhe numeriche. L'idea di base è quella input dell'utente e solo l'input dell'utente, che sembra numerico, dovrebbe essere trattato in questo modo. Le variabili non inizializzate hanno il valore numerico 0 e il valore stringa "" (il null o la stringa vuota). A partire dalla versione 3.1 di gawk, puoi usare le costanti ottale ed esadecimale in stile C nel codice sorgente del tuo programma AWK. Ad esempio, il valore ottale 011 è uguale al decimale 9e il valore esadecimale 0x11 è uguale al decimale 17. Le costanti di stringa in AWK sono sequenze di caratteri racchiusi tra virgolette ('). All'interno di stringhe, certo sequenze di fuga sono riconosciuti, come in C. Questi sono: \ Un letterale backslash. un Il carattere `` alert ''; di solito il carattere ASCII BEL. b backspace. f forma-alimentare. n nuova linea. r ritorno a capo. t scheda orizzontale. v scheda verticale. X cifre esadecimali Il carattere rappresentato dalla stringa di cifre esadecimali che seguono il X. Come in ANSIC, tutte le seguenti cifre esadecimali sono considerate parte della sequenza di escape. (Questa funzione dovrebbe dirci qualcosa sulla progettazione della lingua da parte del comitato.) E.g. " X1b" è il carattere ASCIIESC (escape). ddd Il carattere rappresentato dalla sequenza a 1, 2 o 3 cifre di cifre ottali. Per esempio., ' 033' è il carattere ASCII ESC (escape). c Il personaggio letterale c . Le sequenze di escape possono anche essere utilizzate all'interno di espressioni regolari costanti (ad es./ t f n r v / corrisponde a caratteri bianchi). In modalità di compatibilità, i caratteri rappresentati da sequenze di escape ottali ed esadecimali vengono trattati letteralmente quando usati nelle costanti di espressioni regolari. Così, / A 52b / è equivalente a/ A * b /. AWK è un linguaggio orientato alla linea. Il modello viene prima, e poi l'azione. Le dichiarazioni di azione sono incluse in { e }. O il modello potrebbe mancare, o l'azione potrebbe mancare, ma, ovviamente, non entrambi. Se manca il pattern, l'azione viene eseguita per ogni singolo record di input. Un'azione mancante equivale a {stampa} che stampa l'intero record. I commenti iniziano con il carattere `` # '' e continuano fino alla fine della riga. Le righe vuote possono essere utilizzate per separare le affermazioni. Normalmente, un'istruzione termina con una nuova riga, tuttavia, questo non è il caso per le righe che terminano con un ``, '', {, ?, :, &&, o ||. Linee che terminano in fare o altro anche le loro dichiarazioni continuano automaticamente sulla riga seguente. In altri casi, è possibile continuare una riga terminandola con un ', nel qual caso la nuova riga verrà ignorata. Più affermazioni possono essere messe su una riga separandole con un ``; ''. Questo vale sia per le affermazioni all'interno della parte azione di una coppia modello-azione (il solito caso), sia per le istruzioni pattern-action stesse. I pattern AWK possono essere uno dei seguenti: INIZIO FINE / espressione regolare / espressione relazionale modello && modello modello || modello modello ? modello : modello ( modello ) ! modello pattern1 , pattern2 INIZIO e FINE sono due tipi speciali di modelli che non sono testati rispetto all'input. Le parti di azione di tutti INIZIO i modelli vengono uniti come se tutte le istruzioni fossero state scritte in un singolo INIZIO bloccare. Vengono eseguiti prima che venga letto qualsiasi input. Allo stesso modo, tutto il FINE i blocchi vengono uniti e vengono eseguiti quando tutto l'input è esaurito (o quando a Uscita la dichiarazione è eseguita). INIZIO e FINE i pattern non possono essere combinati con altri pattern nelle espressioni pattern. INIZIO e FINE i pattern non possono aver perso parti di azione. Per / espressione regolare / modelli, l'istruzione associata viene eseguita per ogni record di input che corrisponde all'espressione regolare. Le espressioni regolari sono le stesse di egrep (1), e sono riassunti di seguito. UN espressione relazionale può utilizzare uno qualsiasi degli operatori definiti di seguito nella sezione sulle azioni. Questi test generalmente verificano se determinati campi corrispondono a determinate espressioni regolari. Il &&, ||, e ! gli operatori sono AND logici, OR logici e NOT logici, rispettivamente, come in C. Eseguono la valutazione di cortocircuito, anche come in C, e sono usati per combinare più espressioni di pattern primitive. Come nella maggior parte delle lingue, è possibile utilizzare le parentesi per modificare l'ordine di valutazione. Il ?: l'operatore è come lo stesso operatore in C. Se il primo modello è vero, il modello utilizzato per il test è il secondo modello, altrimenti è il terzo. Viene valutato solo uno dei modelli secondo e terzo. Il pattern1 , pattern2 la forma di un'espressione è chiamata a modello di gamma . Corrisponde a tutti i record di input che iniziano con un record corrispondente pattern1 e continuando fino a un record che corrisponde pattern2 , incluso. Non si combina con nessun altro tipo di espressione del modello. Le espressioni regolari sono il tipo esteso trovato in egrep . Sono composti da caratteri come segue: c corrisponde al non metacharacter c . c corrisponde al carattere letterale c . . corrisponde a qualsiasi personaggio Compreso nuova linea. ^ corrisponde all'inizio di una stringa. $ corrisponde alla fine di una stringa. abc … elenco dei caratteri, corrisponde a uno qualsiasi dei caratteri abc … . ^ abc … elenco di caratteri negati, corrisponde a qualsiasi carattere tranne abc … . r1 | r2 alternanza: corrisponde a entrambi r1 o r2 . R1R2 concatenazione: partite r1 , e poi r2 . r + corrisponde a uno o più r 'S. r * corrisponde a zero o più r 'S. r ? corrisponde a zero o uno r 'S. ( r ) raggruppamento: partite r . r { n } r { n ,} r { n , m } Uno o due numeri all'interno di parentesi graffe indicano a intervallo di espressione . Se c'è un numero nelle parentesi, l'espressione regolare precedente r è ripetuto n volte. Se ci sono due numeri separati da una virgola, r è ripetuto n a m volte. Se c'è un numero seguito da una virgola, allora r è ripetuto almeno n volte. Le espressioni intervallate sono disponibili solo se entrambe --posix o --re-intervallo è specificato sulla riga di comando. y corrisponde alla stringa vuota all'inizio o alla fine di una parola. B corrisponde alla stringa vuota all'interno di una parola. < corrisponde alla stringa vuota all'inizio di una parola. > corrisponde alla stringa vuota alla fine di una parola. w corrisponde a qualsiasi carattere costitutivo della parola (lettera, cifra o trattino basso). W corrisponde a qualsiasi carattere che non sia costitutivo della parola. ` corrisponde alla stringa vuota all'inizio di un buffer (stringa). ' corrisponde alla stringa vuota alla fine di un buffer. Le sequenze di escape valide nelle costanti di stringa (vedere di seguito) sono valide anche nelle espressioni regolari. Classi di caratteri sono una nuova funzionalità introdotta nello standard POSIX. Una classe di caratteri è una notazione speciale per la descrizione di elenchi di caratteri che hanno un attributo specifico, ma in cui i personaggi stessi possono variare da paese a paese e / o dal set di caratteri al set di caratteri. Ad esempio, la nozione di cosa è un carattere alfabetico differisce negli Stati Uniti e in Francia. Una classe di caratteri è valida solo in un'espressione regolare dentro le parentesi di un elenco di caratteri. Le classi di caratteri consistono in :, una parola chiave che denota la classe, e :. Le classi di caratteri definite dallo standard POSIX sono: : Alnum: Caratteri alfanumerici. :alfa: Caratteri alfabetici. : Blank: Spazio o caratteri tab. : Cntrl: Caratteri di controllo : Digit: Caratteri numerici :grafico: Caratteri che sono sia stampabili che visibili. (Uno spazio è stampabile, ma non visibile, mentre un un è Entrambi.) :inferiore: Caratteri alfabetici in minuscolo. :stampare: Caratteri stampabili (caratteri che non sono caratteri di controllo). : Punct: Caratteri di punteggiatura (caratteri che non sono lettere, cifre, caratteri di controllo o caratteri di spazio). :spazio: Caratteri dello spazio (come spazio, tabulazione e formattazione, per citarne alcuni). :superiore: Caratteri alfabetici maiuscoli. : Xdigit: Caratteri che sono cifre esadecimali. Ad esempio, prima dello standard POSIX, per abbinare caratteri alfanumerici, avresti dovuto scrivere / A-Za-Z0-9 /. Se il tuo set di caratteri conteneva altri caratteri alfabetici, ciò non corrisponderebbe a loro, e se il tuo set di caratteri è collazionato in modo diverso da ASCII, questo potrebbe non corrispondere nemmeno ai caratteri alfanumerici ASCII. Con le classi di caratteri POSIX, puoi scrivere/ : Alnum: /e questo corrisponde ai caratteri alfabetici e numerici nel tuo set di caratteri. Due sequenze speciali aggiuntive possono apparire negli elenchi di caratteri. Questi si applicano ai set di caratteri non ASCII, che possono avere simboli singoli (chiamati elementi di confronto ) che sono rappresentati con più di un carattere, così come diversi caratteri che sono equivalenti per fascicolazione , o ordinamento, scopi. (Ad esempio, in francese, un semplice `` e '' e una tomba accentata sono equivalenti.) Simboli di raccolta Un simbolo di confronto è un elemento di fascicolazione a più caratteri racchiuso in . e .. Ad esempio, se ch è un elemento di confronto, quindi .Ch. è un'espressione regolare che corrisponde a questo elemento di confronto, mentre Ch è un'espressione regolare che corrisponde a entrambi c o h. Classi di equivalenza Una classe di equivalenza è un nome specifico della locale per un elenco di caratteri che sono equivalenti. Il nome è incluso in = e =. Ad esempio, il nome e potrebbe essere usato per rappresentare tutti `` e, '' `` e ',' 'e `` e`.' 'In questo caso, = E = è un'espressione regolare che corrisponde a qualsiasi di e, e', o e`. Queste funzionalità sono molto utili in locali non di lingua inglese. La libreria funziona così guardare con aria sciocca gli usi per la corrispondenza delle espressioni regolari attualmente riconoscono solo le classi di caratteri POSIX; non riconoscono i simboli collazionati o le classi di equivalenza. Il y, B, <, >, w, W, `, e ' gli operatori sono specifici di guardare con aria sciocca ; sono estensioni basate su strutture nelle librerie di espressioni regolari GNU. Le varie opzioni della riga di comando controllano come guardare con aria sciocca interpreta i personaggi in espressioni regolari. Nessuna opzione Nel caso predefinito, guardare con aria sciocca fornire tutte le funzionalità delle espressioni regolari POSIX e degli operatori di espressioni regolari GNU sopra descritte. Tuttavia, le espressioni di intervallo non sono supportate. --posix Sono supportate solo le espressioni regolari POSIX, gli operatori GNU non sono speciali. (Per esempio., w corrisponde a un letterale w). Le espressioni di intervallo sono consentite. --tradizionale Unix tradizionale awk le espressioni regolari sono abbinate. Gli operatori GNU non sono speciali, le espressioni di intervallo non sono disponibili e nemmeno le classi di caratteri POSIX (: Alnum: e così via). I caratteri descritti dalle sequenze di escape ottali ed esadecimali sono trattati letteralmente, anche se rappresentano metacaratteri di espressioni regolari. --re-intervallo Consenti espressioni a intervalli nelle espressioni regolari, anche se --tradizionale è stato fornito. Le dichiarazioni d'azione sono racchiuse tra parentesi graffe, { e }. Le dichiarazioni di azione consistono nelle consuete istruzioni di assegnazione, condizionali e cicliche trovate nella maggior parte delle lingue. Gli operatori, le istruzioni di controllo e le istruzioni di input / output disponibili sono modellati dopo quelli in C. Gli operatori in AWK, in ordine di precedenza decrescente, lo sono (…) Raggruppamento $ Riferimento di campo ++ -- Incremento e decremento, sia prefisso sia suffisso. ^ Esponenziazione (** può anche essere usato, e **= per l'operatore incaricato). + - ! Unario più, unario meno e negazione logica. * / % Moltiplicazione, divisione e modulo. + - Addizione e sottrazione. spazio Concatenazione di stringhe. < > <= >= != == Gli operatori relazionali regolari. ~ !~ Corrispondenza di espressioni regolari, corrispondenza negata. NOTA: Non usare un'espressione regolare costante (/ Foo /) sul lato sinistro di a ~ o !~. Ne usi solo uno sul lato destro. L'espressione / foo / ~ exp ha lo stesso significato di (($ 0 ~ / foo /) ~ exp ). Questo di solito è non cosa era destinato. nel Appartenenza alla matrice && AND logico. || OR logico. ?: L'espressione condizionale C Questo ha la forma expr1 ? espr2 : expr3 . Se expr1 è vero, il valore dell'espressione è espr2 , altrimenti lo è expr3 . Solo uno di espr2 e expr3 è valutato = += -= *= /= %= ^= Assegnazione. Entrambe le assegnazioni assolute ( var = valore ) e l'assegnazione dell'operatore (le altre forme) sono supportate. Le dichiarazioni di controllo sono le seguenti: Se ( condizione ) dichiarazione altro dichiarazione mentre ( condizione ) dichiarazione fare dichiarazione mentre ( condizione ) per ( expr1 ; espr2 ; expr3 ) dichiarazione per ( var nel schieramento ) dichiarazione rompere Continua Elimina schieramento indice Elimina schieramento Uscita espressione { dichiarazioni } Le istruzioni di input / output sono le seguenti: vicino( file , Come ) Chiudi file, pipe o co-process. L'opzionale Come dovrebbe essere usato solo quando si chiude un'estremità di un tubo a due vie in un co-processo. Deve essere anche un valore stringa "a" o "a partire dal". getline Impostato $0 dal prossimo record di input; impostato NF, NR, FNR. getline < file Impostato $0 dal prossimo disco di file ; impostato NF. getline var Impostato var dal prossimo record di input; impostato NR, FNR. getline var < file Impostato var dal prossimo disco di file . comando | getline var Correre comando piping l'uscita in $0 o var , come sopra. comando | & getline var Correre comando come un co-processo che convoglia l'output $0 o var , come sopra. I co-processi sono a guardare con aria sciocca estensione. Il prossimo Interrompe l'elaborazione del record di input corrente. Il successivo record di input viene letto e l'elaborazione ricomincia con il primo pattern nel programma AWK. Se viene raggiunta la fine dei dati di input, il FINE blocco (s), se del caso, vengono eseguiti. nextfile Interrompe l'elaborazione del file di input corrente. La successiva lettura del record di input proviene dal successivo file di input. NOME DEL FILE e ARGIND sono aggiornati, FNR viene ripristinato su 1 e l'elaborazione ricomincia con il primo pattern nel programma AWK. Se viene raggiunta la fine dei dati di input, il FINE blocco (s), se del caso, vengono eseguiti. stampare Stampa il record corrente. Il record di output è terminato con il valore di ORS variabile. stampare expr-list Stampa le espressioni. Ogni espressione è separata dal valore del OFS variabile. Il record di output è terminato con il valore di ORS variabile. stampare expr-list > file Stampa le espressioni su file . Ogni espressione è separata dal valore del OFS variabile. Il record di output è terminato con il valore di ORS variabile. printf fmt, expr-list Formatta e stampa. printf fmt, expr-list > file Formatta e stampa file . sistema( cmd-line ) Esegui il comando cmd-line e restituisce lo stato di uscita. (Potrebbe non essere disponibile su sistemi non POSIX.) fflush ( file ) Svuota tutti i buffer associati al file di output aperto o alla pipe file . Se file manca, quindi l'output standard viene svuotato. Se file è la stringa nulla, quindi tutti i file di output e pipe aperti hanno svuotato i buffer. Sono consentiti reindirizzamenti di output aggiuntivi stampare e printf. stampa … >> file aggiunge l'output a file . stampa … | comando scrive su una pipa. stampa … | & comando invia i dati a un co-processo. Il getline il comando restituisce 0 alla fine del file e -1 su un errore. In caso di errore, ERRNO contiene una stringa che descrive il problema. NOTA: Se si utilizza un tubo o un processo di co-processo a getlineo da stampare o printf in un ciclo, tu dovere uso vicino() per creare nuove istanze del comando. AWK non chiude automaticamente i tubi o i co-processi quando restituiscono EOF. Le versioni AWK di printf dichiarazione e sprintf () funzione (vedi sotto) accetta i seguenti formati delle specifiche di conversione: % c Un carattere ASCII. Se l'argomento usato per % c è numerico, viene trattato come un carattere e stampato. In caso contrario, si presuppone che l'argomento sia una stringa e che venga stampato l'unico primo carattere di quella stringa. % d, %io Un numero decimale (la parte intera). % e,% E Un numero in virgola mobile del modulo - d.dddddde + - gg. Il E% formato utilizza E invece di e. % f Un numero in virgola mobile del modulo - ddd.dddddd. % g,% G Uso % e o % f conversione, a seconda di quale sia più breve, con gli zeri non significativi soppressi. IlG% formato utilizza E% invece di % e. % o Un numero ottale senza segno (anche un numero intero). % u Un numero decimale senza segno (di nuovo, un numero intero). %S Una stringa di caratteri. % x,% X Un numero esadecimale senza segno (un numero intero). Il %X formato utilizza A B C D E F invece dia B c D e F. %% Una sola % personaggio; nessun argomento è convertito. Facoltativo, i parametri aggiuntivi possono trovarsi tra il % e la lettera di controllo: contare $ Utilizzare il contare 'l'argomento a questo punto nella formattazione. Questo è chiamato a specificatore posizionale ed è inteso principalmente per l'uso in versioni tradotte di stringhe di formato, non nel testo originale di un programma AWK. È un guardare con aria sciocca estensione. - L'espressione dovrebbe essere giustificata a sinistra nel suo campo. spazio Per le conversioni numeriche, prefisso valori positivi con uno spazio e valori negativi con segno meno. + Il segno più, usato prima del modificatore della larghezza (vedi sotto), dice di fornire sempre un segno per le conversioni numeriche, anche se i dati da formattare sono positivi. Il + sostituisce il modificatore di spazio. # Usa un "modulo alternativo" per alcune lettere di controllo. Per % o, fornire uno zero iniziale. Per %X, e %X, fornire una guida 0x o 0X per un risultato diverso da zero. Per % e, E%, e % f, il risultato contiene sempre un punto decimale. Per % g, e G%, gli zeri finali non vengono rimossi dal risultato. 0 Un leader 0 (zero) funge da flag, che indica che l'output deve essere riempito con zeri anziché spazi. Questo vale anche per i formati di output non numerici. Questo flag ha effetto solo quando la larghezza del campo è più ampia del valore da stampare. larghezza Il campo dovrebbe essere riempito a questa larghezza. Il campo è normalmente riempito di spazi. Se la 0la bandiera è stata usata, è riempita di zeri. . prec Un numero che specifica la precisione da utilizzare durante la stampa. Per il % e, E%, e % fformati, questo specifica il numero di cifre che si desidera stampare a destra del punto decimale. Per il % g, e G% formati, specifica il numero massimo di cifre significative. Per il % d, % o, %io, % u, %X, e %X formati, specifica il numero minimo di cifre da stampare. Per %S, specifica il numero massimo di caratteri dalla stringa che deve essere stampata. La dinamica larghezza e prec capacità dell'ANSI C printf () le routine sono supportate. UN * al posto di entrambi larghezza o prec le specifiche fanno sì che i loro valori siano presi dalla lista degli argomenti a printf o sprintf (). Per utilizzare uno specificatore posizionale con larghezza o precisione dinamica, fornire il comando contare $ dopo il * nella stringa di formato. Per esempio, "% 3 $ * 2 $. * 1 $ s". Quando si esegue il reindirizzamento I / O da entrambi stampare o printf in un file, o via getline da un file, guardare con aria sciocca riconosce alcuni nomi di file speciali internamente. Questi nomi di file consentono l'accesso ai descrittori di file aperti ereditati da guardare con aria sciocca Il processo genitore (di solito la shell). Questi nomi di file possono anche essere utilizzati nella riga di comando per denominare i file di dati. I nomi dei file sono: / Dev / stdin L'input standard. / Dev / stdout L'output standard. / Dev / stderr L'output di errore standard. / Dev / fd / n Il file associato al descrittore di file aperto n . Questi sono particolarmente utili per i messaggi di errore. Per esempio: stampa "Hai rovinato tutto!" > "/ dev / stderr" mentre altrimenti dovresti usare stampa "Hai rovinato tutto!" | "gatto 1> & 2" I seguenti nomi di file speciali possono essere utilizzati con |& co-process operator per la creazione di connessioni di rete TCP / IP. / Inet / tcp / lport / rhost / rport File per la connessione TCP / IP sulla porta locale lport all'host remoto rhost sulla porta remota rport . Usa una porta di 0 per fare in modo che il sistema scelga una porta. / Inet / UDP / lport / rhost / rport Simile, ma usa UDP / IP invece di TCP / IP. / Inet / raw / lport / rhost / rport Riservato per uso futuro. Altri nomi di file speciali forniscono l'accesso alle informazioni sulla corsa guardare con aria sciocca processi. Questi nomi di file sono ora obsoleti. Utilizzare il procinfo array per ottenere le informazioni fornite. I nomi dei file sono: / Dev / pid La lettura di questo file restituisce l'ID di processo del processo corrente, in decimale, terminato con una nuova riga. / Dev / ppid La lettura di questo file restituisce l'ID del processo genitore del processo corrente, in decimale, terminato con una nuova riga. / Dev / pgrpid La lettura di questo file r
Descrizione
Formato dell'opzione
Opzioni
Variabili, record e campi
Records
campi
Variabili incorporate
Array
Digitazione e conversione variabili
Costanti ottali ed esadecimali
Costanti stringa
Modelli e azioni
Patterns
Espressioni regolari
Azioni
operatori
Dichiarazioni di controllo
Istruzioni I / O
L'affermazione printf
Nomi file speciali




