Como executar o awk para algumas linhas.?

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

  • Se você fizesse isso em um loop, eu ' d sugeriria o sed método, uma vez que sed é muito menor (e carrega mais rápido) do que awk.

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

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *