Sfaturi pentru awk

Utilizarea abrevierilor

Construcția utilizată pentru ieșirea liniilor corespunzătoare măștii specificate:

poate fi redus la

Starea în awk poate fi specificată în afara parantezelor, i. E. obținem:

În mod implicit, acțiunile sunt efectuate cu întregul șir, $ 0 poate fi omisă:

print - este acțiunea implicită, poate fi de asemenea omisă:

Pentru a afișa valoarea primei coloane a liniei în care este prezentă masca LEGO:

Pentru a afișa valoarea primei coloane a unei linii în a doua coloană a cărei mască este LEGO:

Pentru a înlocui cuvântul LIGO cu LEGO și pentru a scoate numai rânduri modificate, puteți utiliza:

Dar dacă doriți să tipăriți toate liniile (cum ar fi sed 's / LIGO / LEGO /'), puteți simplifica construcția (1 - adevărat pentru toate rândurile):

Imprimați toate liniile, cu excepția a șasea:

Linii de imprimare începând de la 6 (cum ar fi coada -n +6 sau sed '1,5d'):

Linii de ieșire în care valoarea celei de-a doua coloane este egală cu:

Linii de ieșire cu 6 sau mai multe coloane:

Linii de ieșire cu cuvinte foo și bara:

Liniile de ieșire care au cuvântul foo, dar nu există o bară:

Linii de ieșire cu cuvinte de tip foo sau bar (precum grep -e 'foo' -e 'bar'):

Imprimați toate liniile non-goale:

Imprimați toate rândurile ștergând conținutul ultimei coloane:

Imprimați numerele de linie înaintea conținutului:

Înlocuiți comenzile (săriți o linie, filtrați liniile cu foo și înlocuiți foo cu bara, apoi traduceți la majuscule și tipăriți valoarea celei de-a doua coloane):

similar cu awk:

Utilizarea intervalelor

Imprimați un grup de șir, începând cu linia în care există foo, și terminând cu linia în care există o bară:

Prin omiterea liniei cu măștile specificate din ieșire:

Opțiune mai optimă:

Excludeți numai linia cu intrarea în urmă (bar)

Excludeți numai linia cu apariția inițială (foo)

Divizarea unui fișier de șabloane

Există un fișier în care grupurile de linii sunt separate de șabloanele FOO1, FOO2 etc. Este necesar să se scrie date între etichetele FOO în diferite fișiere corespunzătoare numerelor specificate în FOO.

În GNU Awk, puteți face acest lucru:

Parsarea CSV

În mod prestabilit, delimitatorul este un spațiu și o filă. Pentru a specifica un alt delimiter, de exemplu, o virgulă, trebuie să utilizați FS = ',' sau opțiunea -F.
Ca parametru, puteți specifica o expresie regulată, de exemplu:

Dar pentru parsarea CSV aceasta nu va funcționa, deoarece spațiile pot fi prezente în interiorul liniilor, deci este mai ușor să tăiați spațiile de conducere înainte și după virgulă:

Dacă în CSV datele sunt introduse în ghilimele, de exemplu "field1", "field2", atunci următorul script va face:

Dar scriptul va trebui îmbunătățit pentru a analiza câmpurile formularului:

câmp1 ", câmpul2, cu virgule". field3. «Field4, foo»

Comparația a două dosare

Rezultatul tuturor liniilor duplicate din două fișiere nesortate file1 și file2:

Afișați numai blocuri de text selectate

De exemplu, pentru a afișa dintr-un fișier cu text numai text marcat ca = text = poate fi folosit:

cu formatarea rupturilor de linie:

Linkuri utile pe această temă:

Articole similare