awk 'NR % 5 == 0' input > output
Isto imprime a cada quinta linha.
Para usar uma variável de ambiente:
NUM=5
awk -v NUM=$NUM 'NR % NUM == 0' input > output
Estou tentando imprimir cada enésima linha de um arquivo com mais de 300.000 registros em um novo arquivo. Isso tem que acontecer a cada enésimo registro até chegar ao final do arquivo.
awk 'NR % 5 == 0' input > output
Isto imprime a cada quinta linha.
Para usar uma variável de ambiente:
NUM=5
awk -v NUM=$NUM 'NR % NUM == 0' input > output
sed -n -e '5{p;q}' yourfile > newfile
Onde N = 5, como um exemplo para o seu caso.
O comando sed é dividido como: -n
significa "não imprime linhas por padrão"; então, na linha 5, execute um conjunto { ... }
de comandos; esses comandos são: p
rint a linha, então q
uit.
Similarmente ao sed, também temos o awk:
$ seq 1000000000 |awk 'NR==500000{print;exit}'
500000
NR = Número da linha que você deseja imprimir (e depois sair para evitar a espera do arquivo para terminar). No seu caso
awk 'NR==Nth{print;exit}' inputfile >outputfile
Onde Nth é o número da linha Nth que você precisa imprimir.
Para imprimir todas as linhas N th, use
sed -n '0~Np'Por exemplo, para copiar cada quinta linha de
oldfile
para newfile
, do
sed -n '0~5p' oldfile > newfile
Isso usa o primeiro formulário de endereço do sed
primeiro ~ passo ,
o que significa "corresponder a cada etapa ", começando a linha
com a linha primeiro .
Em teoria,
isso imprimiria as linhas 0, 5, 10, 15, 20, 25,…, até o final do arquivo.
Claro que não há line0, então apenas imprime lines5, 10, 20, 25,…;
0~5
é apenas uma maneira alternativa conveniente de dizer 5~5
(que imprime a cada 5 linhas começando com line5;
isto é, linhas 5, 10, 15, 20, 25,…).
Para outro exemplo dessa capacidade sed
(que não responde à pergunta),
sed -n '2~5p' oldfile
imprime as linhas 2, 7, 12, 17, 22, 27,… até o final do arquivo.
Tags text-processing