Jeśli miałbyś to zrobić w pętli, zasugerowałbym sedmetodę, ponieważ sedjest o wiele mniejsza (i ładuje się szybciej) niż awk.
zrajm
Odpowiedzi:
36
Nie zrozumiałeś, jak to awkdziała. Określony „program” jest zawsze wykonywany raz dla każdej linii (lub „rekordu” w języku awk) wejścia, nie ma potrzeby FORani podobnej konstrukcji. Po prostu użyj:
pełna metoda
ls -l | awk 'NR>=122 && NR<=129 { print }'
bardziej zwarta metoda
ls -l | awk 'NR==122,NR==129'
Podaje się zakres NR, który jest „rekordem liczby”, zwykle jest to bieżąca linia awkprzetwarzana.
W rzeczywistości typowy awkkod takiego zadania jest zwykle ls -l | awk 'NR==122,NR==129'.
manatwork
what is the command for get last 100 line from the file using awk
Shihabudheen K M
8
Jeszcze jedną alternatywną metodą byłoby użycie sed:
ls -l | sed -ne '122,129p'
Ale jeśli, jak sugeruje twoje pytanie, ważne jest, aby użyć do tego awk, idź z komentarzem manatwork do odpowiedzi Zrajma. Jak stwierdza dokumentacja awk:
A pattern may consist of two patterns separated by a comma; in thiscase, the action is performed for all lines from an occurrence of the
first pattern though an occurrence of the second.
Jeśli chcesz, możesz także tworzyć bardziej zaawansowane warunki. Na przykład:
ls -l | awk 'NR==122,/foobar/'
Rozpocznie się to w linii 122 i będzie kontynuowane, dopóki linia nie będzie zawierała słowa „foobar”.
Jeśli podasz nam rzeczywisty przypadek użycia, możemy być w stanie pomóc z odpowiedziami, które stanowią lepsze rozwiązanie. Martwię się, że to brzmi jak problem XY .
sed
metodę, ponieważsed
jest o wiele mniejsza (i ładuje się szybciej) niżawk
.Odpowiedzi:
Nie zrozumiałeś, jak to
awk
działa. Określony „program” jest zawsze wykonywany raz dla każdej linii (lub „rekordu” w języku awk) wejścia, nie ma potrzebyFOR
ani podobnej konstrukcji. Po prostu użyj:pełna metoda
bardziej zwarta metoda
Podaje się zakres
NR
, który jest „rekordem liczby”, zwykle jest to bieżąca liniaawk
przetwarzana.źródło
awk
kod takiego zadania jest zwyklels -l | awk 'NR==122,NR==129'
.Jeszcze jedną alternatywną metodą byłoby użycie
sed
:Ale jeśli, jak sugeruje twoje pytanie, ważne jest, aby użyć do tego awk, idź z komentarzem manatwork do odpowiedzi Zrajma. Jak stwierdza dokumentacja awk:
Jeśli chcesz, możesz także tworzyć bardziej zaawansowane warunki. Na przykład:
Rozpocznie się to w linii 122 i będzie kontynuowane, dopóki linia nie będzie zawierała słowa „foobar”.
Jeśli podasz nam rzeczywisty przypadek użycia, możemy być w stanie pomóc z odpowiedziami, które stanowią lepsze rozwiązanie. Martwię się, że to brzmi jak problem XY .
źródło
Innym sposobem na zrobienie tego (choć wolę tę
awk
metodę) przy użyciu coreutils:źródło