Cursul 5 Comanda sed AWK Comanda sed sed

  • Slides: 29
Download presentation
Cursul 5 Comanda sed AWK

Cursul 5 Comanda sed AWK

Comanda sed • sed este prescurtat de la “stream editor”; nu este interactiv; primeşte

Comanda sed • sed este prescurtat de la “stream editor”; nu este interactiv; primeşte operaţia (comanda) în linia de comandă şi fişierul(ele) asupra căruia se execută. sed are ca intrare un fisier(sau mai multe), executa anumite operatii asupra fisierului(lor) si rezultatul este depus intr-un buffer, al carui continut este transmis catre iesirea comenzii. • Sintaxa este de forma: sed optiuni script fisier(e) • Parametrii optiuni permit sa se controleze comportarea comenzii sed. • Parametrii script specifica o comanda ce se aplica fluxului de date. • Daca este necesar mai mult decit o comanda, trebuie sa se foloseasca optiunea -e pentru a o specica in linia de comanda sau the optiunea –f, pentru a o specifica intr-un fisier separat. • -n suprimă ieşirea; se afişează numai liniile specificate cu comanda p

 • Fiecare comandă se aplică pe rând fiecărei linii selectate din fişierul dat

• Fiecare comandă se aplică pe rând fiecărei linii selectate din fişierul dat ca intrare; dacă lipseşte partea de adresă, se selectează toate liniile. • Rezultatul se trimite implicit în fişierul standard de ieşire • Fanioane: g (global); aplică substituţia la toate aparitiile sablonului din fisier, altfel se aplică substituţia numai la prima linie intilnita. n înlocuieşte a n-a apariţie a tiparului p tipăreşte linia dacă s-a produs o înlocuire d ştergerea liniilor adresate. • Utilizarea fanionului d. • Exemplu: $cat /etc/passwd | sed ‘d’ are ca efect stergerea tuturor liniilor din copia fisierului /etc/passwd $sed -e ‘d’ /etc/passwd, are acelasi efect ca mai inainte $sed -e ‘d’ /etc/passwd > /tmp/newpasswd, iesirea comenzii este in fisierul /tmp/newpasswd

 • Utlizarea comenzii p impreuna cu optiunea n • Exemplu: $cat /etc/passwd |

• Utlizarea comenzii p impreuna cu optiunea n • Exemplu: $cat /etc/passwd | sed ‘p’ | head -10 $cat /etc/passwd | sed -n ‘p’ | head -10 • Selectarea liniilor pe care se opereaza. sed recunoaste notiunea de adresa. Aceasta poate fi o anumita locatie dintr-un fisier sau un domeniu pe care se aplica sed. Cind sed nu intilneste adrese el executa operatiile indicate pe fiecare linie din fisier. • Exemplu: $cat /etc/passwd|sed ‘ 1 d’ | more adauga o adresa lui sed, inainte de fanionul d (nr. 1). Aceasta inseamna ca linia 1 din /etc/password va fi stearsa din bufferul lui sed si va afisa restul de linii. • $cat /etc/passwd|sed ‘ 1, 5 d’ liniile 1, . . , 5 ale fis. /etc/passwd vor fi sterse din bufferul lui sed si restul de linii din /etc/passwd vor fi afisate • Daca pt. specif. domeniului se transmit numere in ordine descresc. , se va aplic sed numai liniei cu primul nr. • Exemplu: $cat /etc/passwd|sed ‘ 10, 4 d’ va afisa continutul lui /etc/passwd , fara linia cu nr 10.

 • Domeniul se poate defini specificind numai nr. cel mai mic de linie

• Domeniul se poate defini specificind numai nr. cel mai mic de linie si un numar de linii care o urmeaza. • Exemplu: $cat /etc/passwd|sed ‘ 4, +5 d’ va afisa numai primele 3 linii şi liniile 10, 11, . . . • Complementarea domeniului de adrese se face cu caract. !, plasat dupa o specificare de domeniu. • Exemplu: $ cat /etc/passwd | sed ‘ 1, 5!d’ va afisa toate liniile din /etc/passwd, cu exceptia primelor 5. • Specificarea adresei cu o valoare initiala si o val. de avans se face cu semnul ~ precedat de un nr. de linie. • Exemplu: $ cat /etc/passwd | sed ‘ 1~3 d’ va afisa prima linie, a 4 -a linie, a 7–a linie etc. • Exemple: Alte moduri de adresare (expresii regulate) /^$/ toate liniile goale 1, /^$/ liniile de la începutul fişierului până la prima goală /cuvant/! liniile care nu conţin cuvant

 • • Substituţia are sintaxa : s/sablon/inlocuire/[fanioane] Se cauta sablon si se inlocuieste

• • Substituţia are sintaxa : s/sablon/inlocuire/[fanioane] Se cauta sablon si se inlocuieste cu inlocuire Pt. sablon se pot folosi expresii regulate. Exemple: $sed s/Unix/Linux/g fis. txt se inlocuiesc toate aparitiile textului Unix cu textul Linux in fisierul fis. txt $sed s/^$/”Linie goala”/ fisier. txt se inlocuieste prima linie goala intilnita cu textul Linie goala $cat /etc/passwd | sed ‘s/root/toor/’ inlocuieste in fisierul /etc/passwd cuvintul root cu toor, numai la prima aparitie. • Utilizarea fanioanelor I, i: realizeaza potrivirea fara a face distinctie intre literele mari si mici(case-insensitive). • Exemplu: $ cat /etc/passwd | sed ‘s/Root/toor/ig’ va face inlocuirile in tot fisierul /etc/passwd , si va inlocui toate aparitile de forma Root, ROOt etc.

 • • Specificarea mai multor comenzi de editare pe aceeasi linie. Comenzile de

• • Specificarea mai multor comenzi de editare pe aceeasi linie. Comenzile de editare sunt executate una dupa alta. Exemplu: $ cat fis. txt|sed ‘s/Ionel/Gigel/; s//Linie goala/’ Inlocuirea celei de-a n-a potriviri. Exemplu: $cat /etc/passwd|sed‘s/root/toor/3’|head -2, va inlocui numai a treia aparitie si va afisa numai primele doua linii din fisier. • Folosirea unui alt separator de siruri de caractere. Problema se pune cind trebuie sa se substituie un sir care contine caract. /. Se poate defini un alt separator, plasat imediat dupa s. • Exemplu: Presup. ca dorim sa schimbam directorul gazda al utiliz. cu drepturi de root, in fis. passwd. In mod curent el este /root, si dorim sa-l schimbam cu /toor. Pt. aceasta tastam: $cat /etc/passwd|sed ‘s: /root: /toor: ’|head -2 • In acest exemplu, am folosit ca sep. caract. : . Acelasi lucru se poate face cu caracterul de evitare . $cat /etc/passwd|sed ‘s//root//toor/’|head -2

 • Utilizarea expresiilor regulate • In exemplele urm. folosim fisierul /etc/syslog. conf, al

• Utilizarea expresiilor regulate • In exemplele urm. folosim fisierul /etc/syslog. conf, al carui continut este: # /etc/syslog. conf Configuration file for #syslogd. # # For more information see syslog. conf(5) # manpage. # First some standard logfiles. Log by #facility. auth, authpriv. * /var/log/auth. log • Exemplu: $cat /etc/syslog. conf|sed ‘/^#/d’ /^#/ este o expresie regulata ce specifica ca se selecteaza toate liniile care incep cu #, care vor fi sterse. Se va afisa: auth, authpriv. * /var/log/auth. log • Daca se tasteaza: $ cat /etc/syslog. conf | sed -n ‘/^#/p’ Se vor afisa toate liniile care incep cu #.

 • • Exemple: $cat /etc/syslog. conf|sed ‘/^$/d’ Are ca efect stergerea tuturor liniilor

• • Exemple: $cat /etc/syslog. conf|sed ‘/^$/d’ Are ca efect stergerea tuturor liniilor albe. In schimb: $cat /etc/syslog. conf|sed -n ‘/^$/p’ va afisa toate liniile albe. $ cat /etc/syslog. conf|sed -n ‘/^[abc]/p’, va afisa auth, authpriv. * /var/log/auth. log, deoarece expresia reg. ^[abc] adreseaza liniile care incep cu a, b sau c. Utilizarea adresarii prin numar de linie si expr. regulata. Exemplu: $cat /etc/syslog. conf|sed ‘ 1, /^$/d’ Va afisa: # # First some standard logfiles. Log by facility. # auth, authpriv. * /var/log/auth. log Comanda declanseaza stergerea de la prima linie , pina cind intilneste prima linie alba.

 • Utilizarea de cuvinte cheie. • • • [[: alnum: ]] [[: alpha:

• Utilizarea de cuvinte cheie. • • • [[: alnum: ]] [[: alpha: ]] [[: blank: ]] [[: cntrl: ]] [[: digit: ]] [[: graph: ]] [[: lower: ]] [[: print: ]] [[: punct: ]] [[: space: ]] [[: upper: ]] [[: xdigit: ]] Caract. alfanumerice [a-z A-Z 0 -9] Caract. alfabetice [a-z A-Z] Caract. albe(spatii sau tab-uri) Caract. de control Numere [0 -9] Caract. vizibile (exclude spat. albe) Litere mici [a-z] Caract. tiparibile. Caract. de punctuatie Spatii albe Litere mari [A-Z] Cifre Hexazecimale [0 -9 a-f A-F]

 • Referentierea expresiei regulate care se potriveste • Metacaracterul & reprezinta contintul sablonului

• Referentierea expresiei regulate care se potriveste • Metacaracterul & reprezinta contintul sablonului care s-a potrivit. • Exemplu: Presupunem ca avem un fisier cu numere de telefon (Tf. Num), care contine: 5555551212 5555551213 5555551214 6665551215 6665551216 7775551217 • Dorim ca primele trei cifre sa fie puse intre paranteze rotunde. Se tasteaza: $sed –e ‘s/^[[: digit: ]][[: digit: ]]/(&)/g’ Tf. Num • Se va afisa: (555)5551212 (555)5551213 (555)5551214 (666)5551215 (666)5551216 (777)5551217 • Observam utilizarea fanionului g(global).

 • Exemplu: Vrem ca pe fiecare linie urm. grup de 6 cifre sa

• Exemplu: Vrem ca pe fiecare linie urm. grup de 6 cifre sa fie impartit in 2 grupe de cite trei cifre, separate prin -. Tastam: $ sed -e ‘s/^[[: digit: ]]{3}/ (&)/ g’ -e ‘s/ [[: digit: ]]{3}/&-/g’ Tf. Num. txt >nums. txt $ cat nums. txt (555)555 -1212 (555)555 -1213 (555)555 -1214 (666)555 -1215 (666)555 -1216 (777)555 -1217 • Exemplu: Mutarea primului cuvînt din linie la sfîrşitul liniei. sed 's/[^ ]*)[ ]*(. *)/2 1 #/' fisier.

 • Caută de la începutul liniei (^) o secvenţă de caractere care nu

• Caută de la începutul liniei (^) o secvenţă de caractere care nu sunt spaţii ( [^ ]* ). • Aceste caractere vor deveni prima variabilă, lucru indicat de parantezele ( ). • Apoi trebuie să urmeze un număr de spaţii [ ]*. • Apoi urmează un număr oarecare de caractere. *. • Aceste ultime caractere devin variabila a doua ( ( ) ). • După ce o linie se potriveşte, ea este transform. : 2 1 # , adică a doua variabilă este pusă la început, urmată de un spaţiu, urmată de prima, urmată de semnul #. • Dacă aplicăm aceasta comanda următorului fişier text: Unu doi trei Patru cinci sase Sapte opt noua obţinem doi trei Unu# cinci sase Patru# opt noua Sapte#

 • Citirea comenzilor de editare dintr-un fisier • Exemplu: Cu comanda cat se

• Citirea comenzilor de editare dintr-un fisier • Exemplu: Cu comanda cat se creeaza fisierul data 1, al carui continut este: Unu doi trei Patru cinci sase Sapte opt noua • De as. , se creaza script 1, care contine comenzile de editare: $cat >script 1 s/unu/patru/ s/patru/sapte/ s/sapte/unu/ • Apoi, se lanseaza: $sed -f script 1 data 1 Patru doi trei sapte cinci sase unu opt noua • Obs. utilizarea optiunii –f pt. a specifica utiliz. fis. de specificatii sed in interiorul comenzii.

AWK • Analog utilitarului GREP, AWK este un instrument pentru analiza si manevrarea usoara

AWK • Analog utilitarului GREP, AWK este un instrument pentru analiza si manevrarea usoara si eleganta a datelor. Versiunea originala a fost dezvoltata in 1977 de cãtre Alfred Aho, Peter Weinberger, and Brian Kernighan de la AT&T Bell Labs. O versiunea îmbunãtãþitã este operationala din 1985. Gawk este implementarea GNU a awk-ului (disponibila sub Linux). Aceasta se considera a fi compatibila versiunii 4 de Unix System V. In cele ce urmeazã utilitarul awk este tratat in general fãrã particularitãþi specifice unei versiuni. Din acest motiv se recomanda înainte de scrierea unui program awk consultarea bibliografiei aferente. Exemplele ilustrate au fost testate si executate atât sub Linux cat si sub Unix SVR 4. • Un program AWK este format din mai multe comenzi. O comanda este formata la rândul ei dintr-un sablon de selectie si un bloc de actiune: selectie { actiune } • Selectia se realizeazã prin folosirea expresiilor regulate. Actiunea are sintaxa apropiata de C si permite efectuarea unor operatii pe datele din fisier. Un fisier este vazut de un program awk ca fiind o succesiune de înregistrãri. Daca separatorul de înregistrare nu a fost modificat el având valoarea predefinita (caracterul 'n‘), înregistrarea este identica cu linia. Înregistrarea este împartita in câmpuri; separatorul de câmpuri este cont. in var. FS.

 • Sintaxa awk [ -f fisier-scenariu ] [ -Fc ] [ scenariu ]

• Sintaxa awk [ -f fisier-scenariu ] [ -Fc ] [ scenariu ] [ variabila=valoare. . . ][ nume fisiere. . . ] • Intrarea în awk este constituită fie din fişierul de intrare standard, fie din fişierele ale căror nume sunt date în linia de comandă. • Rezultatul filtrării prin awk este afişat la ieşirea standard. • Scenariu descrie acţiunile de filtrare. Contine linii de forma: [conditie] {instructiuni} • awk tratează pe rând câte o linie din fişierele de intrare şi pentru fiecare execută instructiuni, atunci când conditie ia valoarea true. Dacă conditie lipseşte, atunci se execută instructiuni pentru toate liniile din fişiere. • conditie - este o expresie logică construită cu operatorii din C: ||, &&, !, (). Operanzii pot fi expresii aritmetice, expresii relationale, constante şi variabile. Variabilele nu trebuie să fie declarate, ele se iniţializează automat, tipul lor deducându-se din context. Pentru variabilele de tip şir de caractere există operatorul de concatenare (spatiu) precum şi câteva funcţii de lucru cu şiruri. Se pot folosi variabile de tip tablou ale căror indici pot să fie numerici sau şiruri de caractere. • Condiţii predefinite: BEGIN este adevarată înainte de prima linie din primul fişier END este adevarată după ultima linie din ultimul fişier

 • Câmpuri si variabile • Fiecare înregistrare este impartita in câmpuri, functie de

• Câmpuri si variabile • Fiecare înregistrare este impartita in câmpuri, functie de valoarea variabilei predefinite FS. Acestea sunt referite prin $1, $2, . . . ; $0 reprezinta toata înregistrarea curenta. • Exista urmatoarele variabile predefinite in programele AWK: • ARGC Numãrul argumentelor din linia de comanda. • ARGV sirul argumentelor din linia de comanda; sirul este indexat de la 0 la ARGC -1. • ENVIRON sirul variabilelor de mediu; sirul este indexat prin variabilele de mediu • Exemplu: ENVIRON["HOME"] poate fi /home/ilflorea. • FILENAME Numele fisierului de intrare curent. Daca nu este specificat nici un fisier in linia de comanda, valoarea variabilei FILENAME este ''. • FNR (File Number Records) Numãrul inregistrarii curente citita din fisierul de intrare. • FS (Field Separator) Separatorul de câmpuri la intrare, implicit 'b'. • NF (Number of Fields) Numãrul de câmpuri din înregistrarea curenta. • NR (Number of Records) Numãrul de înregistrãri inspectate. • OFMT Formatul de iesire pentru numere, implicit "%. 6 g".

 • OFS (Output Field Separator) separatorul de câmpuri la iesire, implicit 'b'. •

• OFS (Output Field Separator) separatorul de câmpuri la iesire, implicit 'b'. • ORS (Output Record Separator) separatorul de înregistrare la iesire, implicit 'n'. • RS (Record Separator) separator de înregistrare, implicit 'n'. Daca RS este setat la sirul null, atunci inregistrarile sunt separate prin linii blanc. In acest caz, caracterul 'n' este separatorul de câmpuri, indiferent de valoarea lui FS. • RSTART Indexul primului caracter potrivit dintr-un apel al functiei match; 0 daca nu exista potrivire. • RLENGTH Lungimea sirului potrivit prin functia match; (1) in caz ca nu exista potrivire. • SUBSEP Caracterul folosit pentru a separa indici multipli la elemente de sir, implicit '34'. • Exemple: $cat >env. awk BEGIN { for ( i in ENVIRON) print i "=" ENVIRON[i] } $awk -f env. awk LOGNAME=root SHELL=/bin/bash HOSTNAME=statia 1. info. unitbv. ro

 • • • Funcţii predefinite. length(sir) lungime şir; length <=> length($0) substr(s, p,

• • • Funcţii predefinite. length(sir) lungime şir; length <=> length($0) substr(s, p, n) subşirul lui s care începe la poziţia p şi are lungimea n index(s 1, s 2)întoarce poziţia la care s 2 apare în s 1 sau 0 daca nu ap. s. sprintf(format, arg 1, . . ) întoarce ca rezultat şirul pe care printf l-ar tipări în C split(s, a, c) unde s este şir, a este tablou şi c un caracter. Împarte şirul s în câmpuri considerând ca separator caracterul c; dacă c lipseşte atunci separatorul implicit este FS. Valorile împărţite sunt date ca valori elementelor tabloului a Operatorul special in poate fi utilizat in instructiuni de control if sau while pentru a decide daca un sir permite un indice de o anumita valoare. if (val in array) print array[val] Acesta poate fi, de asemenea, folosit in bucle for pentru a parcurge toate elementele sirului. Un element poate fi sters dintr-un sir folosind comanda delete. Pentru ca o variabila sa fie tratata ca numar se aduna 0 la ea, iar pentru a fi tratata ca sir se concateneaza cu sirul null. Pentru conversia unui sir la numar se foloseste functia atof.

 • Sabloane de selectie. AWK este un limbaj orientat pe linie. Pentru fiecare

• Sabloane de selectie. AWK este un limbaj orientat pe linie. Pentru fiecare înregistrare din intrare se executa, in ordine toate comenzile din programul AWK. Sablonul de selectie este primul si apoi actiunea. Ambele pot lipsi, dar nu deodata. Daca sablonul de selectie lipseste, actiunea este executata pentru fiecare înregistrare, independent de continutul ei. Daca lipseste actiune vor fi afisate toate inregistrarile care satisfac sablonul de selectie. • O linie de comentariu incepe cu caracterul '#". Liniile vide pot separa instructiuni. O instructiune, in mod normal, se termina cu 'n', in afara cazurilor când linia este terminata cu , { ? : && si ||. O linie poate fi continuata pe urmatoarea daca este terminata cu caracterul ''. • Pe o linie pot exista mai multe instructiuni daca acestea sunt separate prin caracterul '; '. • Un sablon de selectie AWK poate fi o constructie: BEGIN END /expresie regulata/ expresie relationala sablon && sablon || sablon ? sablon : sablon (sablon) ! sablon 1, sablon 2

 • BEGIN si END sunt sabloane speciale care nu sunt aplicate pe intrare.

• BEGIN si END sunt sabloane speciale care nu sunt aplicate pe intrare. Actiunile atasate mai multor sabloane BEGIN sau END sunt concatenate, ca si cum ele ar fi scrise intr-un singur bloc. • Actiunile atasate unui sablon BEGIN sunt executate inainte de a citi o intrare, iar cele atasate unui sablon END la terminarea intrarii. Prima se utilizeaza des pentru initializarea variabilelor, definirea separatorilor, iar ultima la afisarea finala a rezultatelor pe ecran. Sabloanele BEGIN si END nu pot fi combinate cu alte sabloane in expresii si trebuie sa aiba atasate actiuni. • Actiunile atasate sabloanelor ce contin expresii regulate, sunt executate pentru fiecare linie care se potriveste cu expresia regulata. • O expresie relationala poate folosi orice operatori C. AWK recunoaste operatorii limbajului C: - operatori de atribuire: =, +=, -=, *=, /= %=; - operatori aritmetici: +, -, *, /, %, ++, --; - operatori relationali: <, <=, ==, !=, >; - operatori logici: !, ||, &&. • In operatiile de cãutare se folosesc des operatorii: ~ si !~. Primul semnifica coincidenta, iar al doilea negarea sa. De exemplu: $3~/^Da/ # selecteaza campul trei care incepe cu sirul "Da" • Expresia sablon 1, sablon 2 este un sablon ce permite o selectie ce incepe cu linie selectata de sablon 1 si continua pana la linia selectata de sablon 2, inclusiv.

 • Actiuni • Instructiunile ce stabilesc actiunile sunt incluse intre acolade. Ele constau

• Actiuni • Instructiunile ce stabilesc actiunile sunt incluse intre acolade. Ele constau din instructiuni uzuale de atribuire, de test si de ciclare existente in majoritatea limbajelor. Operatorii, instructiunile de control si cele de I/E sunt asemanatoare cu cele din C. • Instructiunile de control sunt: if (conditie) instructiune [ else instructiune ] while (conditie) instructiune do instructiune while (conditie) for (expr 1; expr 2; expr 3) instructiune for (var in array) instructiune break continue delete array[index] exit [ expresie ] { instructiuni }

 • Exemplu: Dorim sa păstram doar o parte din linia de ieşire, cum

• Exemplu: Dorim sa păstram doar o parte din linia de ieşire, cum ar fi primul şi ultimul cuvânt. De ex. , să se listeze doar numele fiş. şi modul de acces, fără celelalte informaţii furnizate de ls – l. $ls -l | awk '{print $1, $NF}' total 151130 -rw-r--r-- add. 1 drwxr-xr-x art drwxr-xr-x bin -rw-r--r-- Buddy. Icon. png drwxr-xr-x CDs drwxr-xr-x downloads drwxr-sr-x eclipse. . . $ • Obs. Se consid. ieşirea comenzii ls – l. O linie a sa arată astfel: drwxr-xr-x 2 username group 176 2006 -10 -28 20: 09 bin

 • Exemplu: Se doreşte tip. liniilor unui fisier cu cuvintele în ordine inversă.

• Exemplu: Se doreşte tip. liniilor unui fisier cu cuvintele în ordine inversă. $cat fisier|awk ‘for (i=NF; i>0; i--) {printf „%s „, $i; } printf „n” }’ • Exemplu: Calculul spatiului ocupat de fisierele directorului curent. $ls –l|awk `{sum += $5} END {print sum}’ • Exemplu: Calculul numarului de fisiere ale fiecarui utilizator dintr-o structura de directoare. cat > asar. awk `NF > 7` {user[$3]++}END { for (i in user) {printf „%s owns %d filesn”, i, user[i] } } $ls –l. R /usr/local | awk –f asar. awk bin owns 68 files albing owns 1801 files root owns 13755 files man owns 11491 files Obs. S-a folosit condiţia NF>7 pentru a elimina liniile ce nu conţin nume de fişiere.

 • Exemplu: Afişarea datelor printr-o histogramă simpla. cat > hist. awk function max(arr)

• Exemplu: Afişarea datelor printr-o histogramă simpla. cat > hist. awk function max(arr) {big = 0; for (i in arr) {if (arr[i] > big) { big=arr[i]; } } return big } `NF > 7 `{user[$3]++} END { maxm = max(user); for (i in user) {printf „%s owns %d filesn”, i, user[i] scaled = 60 * user[i] / maxm ; printf „%-10. 10 s [%8 d]: ”, i, user[i] for (i=0; i<scaled; i++) { printf „#”; } printf „n”; }

 • Dacă se rulează cu aceeaşi intrare ca şi la exemplul anterior, adica

• Dacă se rulează cu aceeaşi intrare ca şi la exemplul anterior, adica : – $ ls –l. R /usr/local | awk –f hist. awk • Se obtine iesirea: bin [ 68]: # albing [ 1801]: ####### root [ 13755]: ####################### man [ 11491]: ##################### $ • Obs. Codul pentru max poate fi plasat în interiorul blocului END. S-a plasat separat pentru a evidenţia posibilitatea definirii funcţiilor în awk. Se foloseşte funcţia printf cunosută. Formatul string %-10. 10 s va fi aliniat la stânga şi grupat în 10 caractere , dar va fi trunchiat la 10 caract. . Formatul întreg %8 d asigură că întregul va fi afişat într-un câmp de 8 caractere. Acest lucru dă histogramei acelaşi punct de pornire, folosind aceeaşi cantitate de spaţii indiferent de numele utilizatorului sau de lungimea întregului. • Ordinea datelor returnate de bucla for (i in user) nu este o ordine particulară, probabil bazată pe o ordonare a tabelei. Dacă se doreşte afişarea sortată a histogramei, ordonată numeric după index sau alfabetic după numele utilizatorului, trebuie adaugat un algoritm de sortare.

 • Exemplu: Se creeaza un script care listeaza numele de user si shell

• Exemplu: Se creeaza un script care listeaza numele de user si shell -ul utilizat. $cat >script 4 BEGIN { print "The latest list of users and shells" print " Userid Shell" print "-------" FS=": " } { print $1 " " $7 } END { print "This concludes the listing" } $

$awk -f script 4 /etc/passwd Userid Shell ------root /bin/bash sync /bin/sync shutdown /sbin/shutdown halt

$awk -f script 4 /etc/passwd Userid Shell ------root /bin/bash sync /bin/sync shutdown /sbin/shutdown halt /sbin/halt mysql /bin/bash rich /bin/bash test 2 /bin/csh test /bin/bash This concludes the listing $ • Obs. utiliz. conditiilor BEGIN, resp END pt. a crea un antet, resp un mesaj de sfirsit. ale raportului; de as. se foloseste variabila FS ptr. a defini caracterul de separare al cimpurilor ( : ).