Qual é a maneira mais curta e mais legível para imprimir a n'ésima linha de um arquivo?

0

É sobre o Unix e o Linux.

Sim, existem muitas soluções para isso, por exemplo veja link . Alguns deles são rápidos como o inferno (não lê todo o arquivo) e alguns são lentos, mas curtos e muito mais legíveis. Estou interessado em uma solução que funciona em arquivos pequenos < 1 MB, que é fácil de lembrar e fácil de ler e deve terminar abaixo de 1 segundo. É claro que eu poderia escrever um script ou um alias de shell, mas quando chego a novos computadores instalados eu tenho que restabelecer meu ambiente primeiro, então prefiro uma solução que funcione com a maioria dos Unix e Linux Distris prontos ou pelo menos depois de instalar a ferramenta desejada via gerenciamento de pacotes. Alguém pode vencer isso?:

 awk NR==42 file
    
por math 05.01.2012 / 10:17

5 respostas

1

As soluções awk e perl têm a desvantagem de continuar lendo após imprimir a linha Nth. O comando yes , que imprime infinitas linhas, pode ser usado para testar isso.

Uma solução curta que compartilha esse problema é:

 sed -n 42p file

Este sai depois de imprimir a linha:

sed -n '42{p;q}' file
    
por 05.01.2012 / 11:58
1

Desde que haja um comando de cabeça e cauda

Isto irá imprimir a 12ª linha do arquivo abc. Mantenha a tail -n 1 e mude 12 para o número da linha que deseja imprimir.

$ head -n 12 abc | cauda -n 1

Se você está disposto a instalar uma ferramenta através do gerenciamento de pacotes, então você deve estar disposto a usar um script que você escreve, e também, eu acho que talvez todas as suas distribuições linux e unix tenham comandos head e tail. mas se não, então, instale-os, ou instale awk ou perl, é claro que o que você usar funcionará da mesma forma em qualquer sistema, desde que o sistema tenha a ferramenta, seja head and tail, awk ou perl.

    
por 05.01.2012 / 11:43
0

Eu não acho que posso bater o seu exemplo AWK para brevidade ou legibilidade, mas aqui está um exemplo de Perl

  perl -ne 'print if $. == 42' file
    
por 05.01.2012 / 10:38
0

use sed:

sed -n 42p file

É fácil digitar (sem letras maiúsculas, não é necessário pressionar "Shitft") e é muito curto.

    
por 05.01.2012 / 11:57
0

Você pode usar o sed . No comando a seguir, a opção -n desabilita a impressão de cada linha, portanto somente a impressão explícita ( p comandos) é executada. 12 corresponde à 12ª linha e p emite uma impressão.

sed -n '12 p'
    
por 05.01.2012 / 11:57

Tags