Desejo extrair algumas linhas com awk
. É possível fazer 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?
Comentários
Resposta
Você não entendeu como o awk
funciona. O “programa” especificado é sempre executado uma vez para cada linha (ou “registro” na linguagem awk) de entrada, não há necessidade de FOR
ou qualquer construção semelhante. Basta usar:
método detalhado
ls -l | awk "NR>=122 && NR<=129 { print }"
método mais compacto
ls -l | awk "NR==122,NR==129"
Este fornece um intervalo para NR
, que é o “Registro de número”, normalmente este é a linha atual que awk
está processando.
Comentários
- Na verdade, o o código para tal tarefa é geralmente
ls -l | awk 'NR==122,NR==129'
. - qual é o comando para obter as últimas 100 linhas do arquivo usando awk
- @ShihabudheenKM Pode dar uma olhada em: stackoverflow.com/questions/12546919/…
Resposta
Outro método alternativo seria usar sed
:
Mas se, como sua pergunta sugere, é importante usar o awk para isso, siga o comentário do manatwork na resposta de Zrajm. Conforme afirma a documentação do 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.
Portanto, se desejar, você também pode 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 o palavra “foobar”.
Se você nos informar o caso de uso real , poderemos ajudar com respostas que forneçam uma solução melhor. Estou preocupado que isso soe como um problema XY .
Resposta
Outra maneira de fazendo isso (embora eu prefira o método awk
) usando coreutils:
ls -l | tail -n +122 | head -n 8
Resposta
awk "NR == 122,NR == 129{print $0}" file
Aqui podemos extrair as linhas de 122 a 129 do arquivo.
$0
é usado para imprimir todos os dados do arquivo entre 122 e 129 linhas.
Comentários
- resposta duplicada de unix.stackexchange.com/a/89641/72456
sed
método, uma vez quesed
é muito menor (e carrega mais rápido) do queawk
.