O comportamento que você está vendo não está diretamente relacionado a sed
ou awk
- é um resultado de sua escolha de LINES
como o nome da sua variável de loop (e as regras de escopo para variáveis shell). p>
As variáveis de shell LINES
e COLUMNS
são usadas pelos emuladores de terminal para controlar o tamanho de sua janela de saída, para que eles possam agrupar corretamente o texto e paginar (quando um pager como less
está sendo usava). O comportamento padrão de bash
é verificar o tamanho da janela após cada comando externo:
checkwinsize
If set, bash checks the window size after each command
and, if necessary, updates the values of LINES and COL‐
UMNS.
No seu caso, LINES
está sendo atualizado (e redefinido para a altura do terminal padrão, que é de 24 linhas) após cada chamada de sed
e awk
.
Embora seja possível desativar a opção checkwinsize
(usando shopt -u checkwinsize
), isso não é recomendado: basta alterar o nome da variável para algo que não está em conflito, como lines
em minúscula. Uma boa regra é evitar completamente todos os nomes maiúsculos: veja, por exemplo, Existem convenções de nomenclatura para variáveis em scripts de shell?