it-swarm-pt.tech

Imprima um arquivo pulando as primeiras X linhas no Bash

Eu tenho um arquivo muito longo que eu quero imprimir, mas pular as primeiras linhas 1e6 por exemplo. Eu olho para a página do homem gato, mas não vejo nenhuma opção para fazer isso. Eu estou procurando um comando para fazer isso ou um simples programa bash.

456
Eduardo

Você precisará da cauda. Alguns exemplos:

$ tail great-big-file.log
< Last 10 lines of great-big-file.log >

Se você realmente precisar SKIP um número específico de "primeiras" linhas, use

$ tail -n +<N+1> <filename>
< filename, excluding first N lines. >

Isto é, se você quiser pular N linhas, você começa a imprimir a linha N + 1. Exemplo:

$ tail -n +11 /tmp/myfile
< /tmp/myfile, starting at line 11, or skipping the first 10 lines. >

Se você quiser apenas ver as últimas tantas linhas, omita o "+":

$ tail -n <N> <filename>
< last N lines of file. >
738
SingleNegationElimination

Se você tem a cauda do GNU disponível em seu sistema, você pode fazer o seguinte:

tail -n +1000001 huge-file.log

É o caractere + que faz o que você quer. Para citar a página man:

Se o primeiro caractere de K (o número de bytes ou linhas) for um '+', imprima começando com o item K no início de cada arquivo.

Assim, conforme observado no comentário, colocar +1000001 começa a imprimir com o primeiro item após as primeiras 1.000.000 linhas.

91
Eddie

A maneira mais fácil que encontrei para remover as dez primeiras linhas de um arquivo:

$ sed 1,10d file.txt
89
David Parks

Uma versão menos detalhada com o AWK:

awk 'NR > 1e6' myfile.txt

Mas eu recomendaria usar números inteiros.

25
newtover

Apenas para propor uma alternativa sed. :) Para pular primeiro um milhão de linhas, tente |sed '1,1000000d'.

Exemplo:

$ Perl -wle 'print for (1..1_000_005)'|sed '1,1000000d'
1000001
1000002
1000003
1000004
1000005
13
tuomassalo

se você quiser pular primeiro duas linhas
tail -n +3 <filename>

se você quiser pular primeiro x linha
tail -n +$((x+1)) <filename>

13
saipraneeth

Se você quiser ver a primeira linha 10 você pode usar sed como abaixo:

sed -n '1,10 p' myFile.txt

ou se você quiser ver linhas de 20 a 30 você pode usar:

sed -n '20,30 p' myFile.txt
12
Kadir YILDIZ

Use o comando sed delete com a endereço do intervalo . Por exemplo:

$ sed 1,100d file.txt # Print file.txt omitting lines 1-100.

Como alternativa, se você deseja imprimir apenas um intervalo conhecido, use o comando print com o sinalizador -n:

$ sed -n 201,300p file.txt # Print lines 201-300 from file.txt

Essa solução deve funcionar de maneira confiável em todos os sistemas UNIX, independentemente da presença de utilitários GNU.

11
maerics

Este script Shell funciona bem para mim:

#!/bin/bash
awk -v initial_line=$1 -v end_line=$2 '{
    if (NR >= initial_line && NR <= end_line) 
    print $0
}' $3

Usado com este arquivo de amostra (arquivo.txt):

one
two
three
four
five
six

O comando (extrairá da segunda para a quarta linha no arquivo):

[email protected]:~$./script.sh 2 4 file.txt

Saída deste comando:

two
three
four

Claro, você pode melhorá-lo, por exemplo, testando que todos os valores de argumentos são os esperados :-)

10
sourcerebels

Você pode fazer isso usando os comandos head e tail:

head -n <num> | tail -n <lines to print>

onde num é 1e6 + o número de linhas que você deseja imprimir.

5
Dana the Sane
sed -n '1d;p'

este comando irá apagar a primeira linha e imprimir o resto

4
Soroush Pouryazdian
cat < File > | awk '{if(NR > 6) print $0}'
3
aamadeo