A extração das linhas 10 a 20 de um arquivo é uma combinação simples de head
e tail
:
tail -n +11 | head -n 10 | mycommand
Este comando pula 10 linhas e processa as próximas 10. Se você quiser processar todas as linhas no arquivo em seqüência, mas por grupos de 10, existem maneiras melhores. Você pode ler 10 linhas com head
repetidamente. Observe o uso de chunk=$(…; echo a)
seguido por remover o a
, para contornar a supressão de novas linhas finais nas substituições de comandos. Essa abordagem tem a vantagem de funcionar mesmo se a entrada for um pipe (que você não pode retroceder) e também é mais rápido para um arquivo regular. Aviso, código não testado, digitado diretamente no navegador.
while chunk=$(head -n 10; echo a); chunk=${chunk#a}; [ -n "$chunk" ]; do
printf %s "$chunk" | mycommand
done <filename
Alternativamente, você pode fazer o awk fazer o trabalho. Mais uma vez, não testado.
awk '
{chunk = chunk $0 RS}
NR % 10 {print chunk | "mycommand"; close("mycommand"); chunk="" }
END {if (chunk != "") {print chunk | "mycommand"; close("mycommand"); chunk="" }}
' <filename