Gato Unix a partir da linha


40

Qual é a melhor maneira de gerar um arquivo a partir de uma linha específica (número grande como 70000). Algo como:

cat --line=70000 <file>

Respostas:


60

Dê uma olhada na cauda, ​​mais precisamente, é a opção --lines = + N:

tail --lines=+100 <file>

Uau. Eu não sabia disso, mesmo depois de usá-lo no Linux por 8 anos! Eu sempre usei um bash fn! Obrigado ! getFromLine () {lineno = wc -l $1 | awk '{print $1}'; lineno = expr $lineno - $2; tail -n $ lineno $ 1; }
secureBadshah

2
Como uma observação, isso não funciona no Mountain Lion (Darwin Kernel Versão 13.1.0). A variante para Mountain Lion étail -n
Kaushik Ghose

22

A maneira mais óbvia é tail. A sintaxe pode ser um pouco diferente, dependendo do SO que você está usando:

tail -n +70000

Se você não conseguir tailtrabalhar, poderá usá- sedlo, mas pode acabar mais lento:

sed -pe '1,69999d'

tailfuncionou bem no MinGW (em um arquivo de texto de 600 MB). O tempo de execução foi de apenas alguns segundos (mas o arquivo de entrada já poderia estar no cache).
Peter Mortensen

2

Se, em vez de um número de linha, você precisar começar a listar na linha que contém um determinado $phrase, tente o seguinte.

more -1000 +/"$phrase" yourfilename | sed '1,4d'

O -1000 listará continuamente o texto para até 1000 linhas; você pode alterar isso conforme necessário. O sedcomando cortará as 4 primeiras linhas de saída, que foram inseridas automaticamente por more, contendo uma linha em branco, a mensagem "... pulando" e as duas linhas que precedem a linha inicial pretendida. Eu acho que isso pode variar dependendo do seu sistema.


2

Você pode usar o parâmetro NR com o comando awk :

cat <file> | awk '{if (NR>=7000) print}'

2
Você pode usar este comando com outros limites. Como exemplo: cat messages | awk '{if (NR>=7000 && NR <7003) print}'mostra as linhas 7000, 7001 e 7002 apenas.
Gefolge

-1

2
link fascinante, mas realmente não fornece nenhuma informação que se aplique a essa pergunta, e sua tailsugestão é a mesma que as respostas aceitas e outras respostas de semanas atrás. por que se preocupar em postar?
quack quixote

O link está quebrado - #...can't find the server at www.scripterworld.com.
315 Peter Mortensen
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.