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 .