Eu quero extrair algumas linhas com awk
. É possível executar a seguinte tarefa:
ls -l | awk 'BEGIN FOR(i=122;i<=129;i++) FNR==i'
Como posso exibir os detalhes dos números de linha 122 a 129?
Eu quero extrair algumas linhas com awk
. É possível executar a seguinte tarefa:
ls -l | awk 'BEGIN FOR(i=122;i<=129;i++) FNR==i'
Como posso exibir os detalhes dos números de linha 122 a 129?
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á necessidade FOR
ou 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 awk
está sendo processada.
awk
código típico para essa tarefa é geralmente ls -l | awk 'NR==122,NR==129'
.
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 this case, 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
.