Chci extrahovat některé řádky pomocí awk
. Je možné provést následující úkol:
ls -l | awk "BEGIN FOR(i=122;i<=129;i++) FNR==i"
Jak mohu zobrazit podrobnosti z čísel řádků 122 až 129?
Komentáře
Odpověď
Nechápali jste, jak awk
funguje. Zadaný „program“ je vždy proveden jednou pro každý řádek (nebo „záznam“ v řeči awk) vstupu, není třeba FOR
nebo jakýkoli podobný konstrukt. Stačí použít:
podrobná metoda
ls -l | awk "NR>=122 && NR<=129 { print }"
kompaktnější metoda
ls -l | awk "NR==122,NR==129"
Ten udává rozsah pro NR
, což je „číselný záznam“, obvykle tento je aktuální řádek awk
zpracovává.
Komentáře
- Vlastně typický
awk
kód pro takový úkol je obvyklels -l | awk 'NR==122,NR==129'
. - jaký je příkaz pro získání posledních 100 řádků ze souboru pomocí awk
- @ShihabudheenKM Může se podívat na toto: stackoverflow.com/questions/12546919/…
Odpověď
Další alternativní metodou by bylo použití sed
:
Ale pokud je, jak naznačuje vaše otázka, pro to důležité použít awk, jděte s komentářem manatwork k Zrajmově odpovědi. Jak uvádí dokumentace 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.
Pokud tedy chcete, můžete také vytvořit pokročilejší podmínky. Například:
ls -l | awk "NR==122,/foobar/"
Tím by se spustil výstup na řádku 122 a pokračoval, dokud by řádek neobsahoval slovo „foobar“.
Pokud nám sdělíte skutečný případ použití, mohli bychom vám pomoci s odpověďmi, které poskytnou lepší řešení. Obávám se, že to zní jako XY problém .
Odpověď
Jiný způsob dělat to (i když dávám přednost metodě awk
) pomocí coreutils:
ls -l | tail -n +122 | head -n 8
odpověď
awk "NR == 122,NR == 129{print $0}" file
Zde můžeme extrahovat řádky ze 122 na 129 souboru.
$0
se používá k tisku celých dat souboru mezi 122 a 129 řádky.
Komentáře
- duplicitní odpověď unix.stackexchange.com/a/89641/72456
sed
, protožesed
je mnohem menší (a načítá se rychleji) nežawk
.