Se você fizer isso em um loop, sugiro o sedmétodo, pois sedé muito menor (e carrega mais rápido) do que awk.
Zrajm 6/09/13
Respostas:
36
Você não entendeu como awkfunciona. O "programa" especificado é sempre executado uma vez para cada linha (ou "registro" na linguagem awk) de entrada, não há necessidade FORou construção semelhante. Apenas use:
método detalhado
ls -l | awk 'NR>=122 && NR<=129 { print }'
método mais compacto
ls -l | awk 'NR==122,NR==129'
Esse fornece um intervalo para NR, que é o "Registro de número", normalmente é a linha atual que awkestá sendo processada.
Na verdade, o awkcódigo típico para essa tarefa é geralmente ls -l | awk 'NR==122,NR==129'.
manatwork
Qual é o comando para obter passado 100 linha do arquivo usando awk
Shihabudheen KM
8
Um outro método alternativo seria usar sed:
ls -l | sed -ne '122,129p'
Mas se, como sugere sua pergunta, é importante usar o awk para isso, siga o comentário de manatwork sobre a resposta de Zrajm. Como a documentação do awk indica:
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.
Então, se você quiser, também poderá criar condições mais avançadas. Por exemplo:
ls -l | awk 'NR==122,/foobar/'
Isso iniciaria a saída na linha 122 e continuaria até que uma linha contivesse a palavra "foobar".
Se você nos informar o caso de uso real , poderemos ajudar com respostas que fornecem uma solução melhor. Estou preocupado que isso pareça um problema XY .
sed
método, poissed
é muito menor (e carrega mais rápido) do queawk
.Respostas:
Você não entendeu como
awk
funciona. O "programa" especificado é sempre executado uma vez para cada linha (ou "registro" na linguagem awk) de entrada, não há necessidadeFOR
ou construção semelhante. Apenas use:método detalhado
método mais compacto
Esse fornece um intervalo para
NR
, que é o "Registro de número", normalmente é a linha atual queawk
está sendo processada.fonte
awk
código típico para essa tarefa é geralmentels -l | awk 'NR==122,NR==129'
.Um outro método alternativo seria usar
sed
:Mas se, como sugere sua pergunta, é importante usar o awk para isso, siga o comentário de manatwork sobre a resposta de Zrajm. Como a documentação do awk indica:
Então, se você quiser, também poderá criar condições mais avançadas. Por exemplo:
Isso iniciaria a saída na linha 122 e continuaria até que uma linha contivesse a palavra "foobar".
Se você nos informar o caso de uso real , poderemos ajudar com respostas que fornecem uma solução melhor. Estou preocupado que isso pareça um problema XY .
fonte
Outra maneira de fazer isso (embora eu prefira o
awk
método) usando coreutils:fonte