Cum să rulați awk pentru un anumit număr de linii.?

Vreau să extrag câteva linii cu awk. Este posibil să efectuați următoarea sarcină:

ls -l | awk "BEGIN FOR(i=122;i<=129;i++) FNR==i" 

Cum pot afișa detaliile de la numerele de linie 122 până la 129?

Comentarii

  • Dacă ar fi să faceți acest lucru într-o buclă, ' sugerez sed metoda, deoarece sed este mult mai mică (și se încarcă mai repede) decât awk.

Răspuns

Nu ați înțeles cum funcționează awk. „Programul” specificat este întotdeauna executat o dată pentru fiecare linie (sau „înregistrare” în limbajul awk) de intrare, nu este nevoie de FOR sau orice construcție similară. Folosiți doar:

metodă detaliată

ls -l | awk "NR>=122 && NR<=129 { print }" 

metodă mai compactă

ls -l | awk "NR==122,NR==129" 

Acestea dau un interval pentru NR, care este „Înregistrarea numerică”, de obicei aceasta este linia curentă awk se procesează.

Comentarii

  • De fapt codul pentru o astfel de activitate este de obicei ls -l | awk 'NR==122,NR==129'.
  • care este comanda pentru a obține ultimele 100 de linii din fișier folosind awk
  • @ShihabudheenKM Poate arunca o privire la acest lucru: stackoverflow.com/questions/12546919/…

Răspuns

O altă metodă alternativă ar fi utilizarea sed :

Dar dacă, așa cum sugerează întrebarea dvs., este important să folosiți awk pentru acest lucru, mergeți cu comentariul de mană la răspunsul lui Zrajm. După cum se arată în documentația awk:

 A pattern may consist of two patterns separated by a comma; in this case, the action is performed for all lines from an occurrence of the first pattern though an occurrence of the second. 

Deci, dacă doriți, puteți crea condiții mai avansate. De exemplu:

ls -l | awk "NR==122,/foobar/" 

Acest lucru ar începe ieșirea la linia 122 și va continua până când o linie conține cuvântul „foobar”.

Dacă ne spuneți cazul de utilizare actual , s-ar putea să vă putem ajuta cu răspunsuri care să ofere o soluție mai bună. Mă tem că sună ca o problemă XY .

Răspuns

Un alt mod de făcând acest lucru (deși prefer metoda awk) folosind coreutils:

ls -l | tail -n +122 | head -n 8 

Răspuns

 awk "NR == 122,NR == 129{print $0}" file 

Aici putem extrage liniile de la 122 la 129 din fișier.

$0 este utilizat pentru a imprima datele întregi ale fișierului între 122 și 129 de linii.

Comentarii

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *