Você pode usar sed
ou awk
para fazer isso com um comando. No entanto, você perderá velocidade, pois sed
e awk
precisarão percorrer todo o arquivo mesmo assim.
Do ponto de vista da velocidade, é muito melhor fazer uma função ou, a cada vez, a combinação de tail
+ head
. Isto tem o lado negativo de não funcionar se a entrada for um pipe, no entanto você pode usar a substituição do processo, caso seu shell o suporte (veja o exemplo abaixo).
first_last () {
head -n 10 -- "$1"
tail -n 10 -- "$1"
}
e inicie-o como
first_last "/path/to/file_to_process"
para prosseguir com a substituição do processo (bash, zsh, ksh apenas como shells):
first_last <( command )
ps. você pode até adicionar um grep
para verificar se suas "condições globais" existem.