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
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
- răspuns duplicat al unix.stackexchange.com/a/89641/72456
sed
metoda, deoarecesed
este mult mai mică (și se încarcă mai repede) decâtawk
.