Jak spustit awk pro určitý počet řádků.?

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

  • Pokud byste to měli dělat ve smyčce, navrhuji ' d sed, protože sed je mnohem menší (a načítá se rychleji) než awk.

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 obvykle ls -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

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *