Jak uruchomić awk dla pewnej liczby wierszy.?

Chcę wyodrębnić niektóre wiersze za pomocą awk. Czy można wykonać następujące zadanie:

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

Jak mogę wyświetlić szczegóły z linii od 122 do 129?

Komentarze

  • Jeśli miałbyś to zrobić w pętli, ' d sugeruję sed, ponieważ sed jest o wiele mniejsza (i ładuje się szybciej) niż awk.

Odpowiedź

Nie rozumiesz, jak działa awk. Określony „program” jest zawsze wykonywany raz dla każdej linii (lub „rekordu” w żargonie awk) wejścia, nie ma potrzeby stosowania FOR lub dowolnej podobnej konstrukcji. Po prostu użyj:

metoda szczegółowa

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

metoda bardziej zwarta

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

To daje zakres dla NR, czyli „rekordu numeru”, zazwyczaj jest to to bieżący wiersz awk jest przetwarzany.

Komentarze

  • Właściwie typowe awk dla takiego zadania jest zwykle ls -l | awk 'NR==122,NR==129'.
  • jakie jest polecenie pobrania ostatnich 100 linii z pliku przy użyciu awk
  • @ShihabudheenKM Może rzucić okiem na to: stackoverflow.com/questions/12546919/…

Odpowiedź

Jeszcze jedną alternatywną metodą byłoby użycie sed :

Ale jeśli, jak sugeruje twoje pytanie, ważne jest, aby używać do tego awk, przejdź do komentarza manatwork do odpowiedzi Zrajma. Jak podaje dokumentacja 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. 

Więc jeśli chcesz, możesz również wprowadzić bardziej zaawansowane warunki. Na przykład:

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

Spowoduje to rozpoczęcie wyjścia w linii 122 i kontynuowanie aż do wiersza zawierającego słowo „foobar”.

Jeśli podasz nam rzeczywisty przypadek użycia, być może będziemy w stanie pomóc w znalezieniu lepszych rozwiązań. Martwię się, że to brzmi jak problem XY .

Odpowiedź

Inny sposób robienie tego (chociaż wolę metodę awk) przy użyciu coreutils:

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

Odpowiedź

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

Tutaj możemy wyodrębnić wiersze od 122 do 129 pliku.

$0 służy do drukowania całych danych pliku między 122 a 129 liniami.

Komentarze

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *