Hogyan lehet futtatni az awk-t néhány sor számára?

Szeretnék kibontani néhány sort a awk sorral. Lehetséges-e a következő feladat:

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

Hogyan jeleníthetek meg részleteket a 122-től 129-ig terjedő sorokig?

Megjegyzések

  • Ha ezt ciklusban tenné, akkor ' javaslom a sed módszer, mivel a sed sokkal kisebb (és gyorsabban töltődik be), mint a awk.

Válasz

Nem értette, hogyan működik a awk. A megadott “program” mindig egyszer végrehajtásra kerül minden bemenet sorához (vagy “rekord” awk szóhasználatban), nincs szükség FOR vagy bármilyen hasonló konstrukciót. Csak használja:

részletes módszer

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

kompaktabb módszer

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

Ez egy tartományt ad a NR számára, amely a “Számrekord”, általában ez az aktuális sor awk feldolgozás alatt áll.

Megjegyzések

  • Valójában a tipikus awk kód az ilyen feladathoz általában ls -l | awk 'NR==122,NR==129'.
  • mi a parancs az utolsó 100 sor letöltésére a fájlból az awk
  • @ShihabudheenKM Megnézheti ezt: stackoverflow.com/questions/12546919/…

Válasz

Még egy alternatív módszer a sed használata :

Ha azonban – amint a kérdésed sugallja – fontos, hogy ehhez az awk-t használd, menj a kézirat kommentárjával Zrajm válaszára. Ahogy az awk dokumentációja állítja:

 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. 

Tehát, ha akarod, fejlettebb feltételeket is megadhat. Például:

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

Ez a kimenetet a 122. sorban kezdi, és addig folytatódik, amíg egy sor nem tartalmazza a “foobar” szó.

Ha elmondja nekünk a tényleges használati esetet, akkor képesek lehetünk segíteni a jobb megoldást nyújtó válaszokkal. Aggódom, hogy ez úgy hangzik, mint egy XY probléma .

Válasz

A probléma másik módja ezzel (bár inkább a awk módszert részesítem előnyben) coreutils használatával:

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

Válasz

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

Itt kivonhatjuk a sorokat a fájl 122-től 129-ig.

az egész fájladat 122 és 129 sor közötti nyomtatására szolgál.

megjegyzések

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük