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
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ábanls -l | awk 'NR==122,NR==129'
. - mi a parancs az utolsó 100 sor letöltésére a fájlból az awk li használatával >
- @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.
sed
módszer, mivel ased
sokkal kisebb (és gyorsabban töltődik be), mint aawk
.