Perl também pode fazer isso:
while (<>) {
print if $. % 3 == 1;
}
Este programa irá imprimir a primeira linha de sua entrada, e a cada terceira linha depois.
Para explicar um pouco, <>
é o operador de entrada de linha, que itera sobre as linhas de entrada quando usado em um loop while
como este. A variável especial $.
contém o número de linhas lidas até o momento e %
é o operador de módulo.
Esse código pode ser escrito de forma ainda mais compacta como uma linha única, usando as opções -n
e -e
:
perl -ne 'print if $. % 3 == 1' < input.txt > output.txt
A opção -e
usa um código Perl para executar como um parâmetro de linha de comando, enquanto a opção -n
envolve implicitamente o código em um loop while
como o mostrado acima.
Edit: Para obter as linhas 1, 3, 6, 9, ... como no exemplo, em vez das linhas 1, 4, 7, 10, ... como eu assumi que você queria, substitua $. % 3 == 1
com $. == 1 or $. % 3 == 0
.