Como pegar 1ª e última linha de um arquivo ?

1. Como pegar 1ª e última linha de um arquivo ?

Geraldo Albuquerque
AprendiNoLinux

(usa Ubuntu)

Enviado em 05/09/2011 - 12:30h

Olá all

Consultando esta dica: http://www.vivaolinux.com.br/dica/Combinando-os-comandos-head-e-tail , não consegui resolver o meu problema.
Supondo que tenho o mesmo arquivo do exemplo:

==========================
01. Aline Tavares Silva
02. Bruno Delgado Bonfim
03. Carla Garantizado Bela
04. Danilo Servantes
05. Eliane Costa Pinheiro
06. Elivaldo Pereira
07. Fábio Berbert de Paula
08. Felipe Azambuja
09. Gardineu Marques
10. Romário Belleza
======================
Preciso pegar a 1ª e última linha apenas.

Em alguns casos, preciso pegar as 2(duas) primeiras linhas do arquivo e a última ou as últimas.

Preciso de um comando para passar a quantidade que desejo ver de linhas do início e as ultimas linhas.
Se eu fizer em comandos separados, 1 head e ou tail eu sei como fazer.
Será que só dá pra feito com 2 comandos em separado mesmo ?

Obrigado.


  


2. Re: Como pegar 1ª e última linha de um arquivo ?

Guilherme Yohan
guilherme_yohan

(usa Ubuntu)

Enviado em 05/09/2011 - 12:47h

pesquise um pouco sobre o comando Grep


3. Re: Como pegar 1ª e última linha de um arquivo ?

Renato Carneiro Pacheco
renato_pacheco

(usa Debian)

Enviado em 05/09/2011 - 13:26h

Use o head (pra pegar as primeiras linhas) e o tail (pra pegar as últimas linhas). Em cada um, vc pode especificar quantas linhas vc pode pegar.


4. Re: Como pegar 1ª e última linha de um arquivo ?

Alexandre Gonçalves Monteiro da Silva
alexandregms

(usa Ubuntu)

Enviado em 05/09/2011 - 15:28h

Primeira linha: head -1 arquivo.txt
Útima linha: tail -1 arquivo.txt




5. Re: Como pegar 1ª e última linha de um arquivo ?

Hudson Moreira Guimaraes dos Santos
hudyfx

(usa Outra)

Enviado em 05/09/2011 - 16:05h

[citação]
Preciso de um comando para passar a quantidade que desejo ver de linhas do início e as ultimas linhas.
Se eu fizer em comandos separados, 1 head e ou tail eu sei como fazer.
Será que só dá pra feito com 2 comandos em separado mesmo ?
[/citação]

i rapaz com uma unica linha de comando não sei não... suas perguntas estão ficando cada vez mais difíceis (e isso é bom continue assim rsrsrs) ... pq que tem qui ser, só com um comando?

como vc mesmo disse " head e ou tail eu sei como fazer." com esses comandos não serve?


6. Talvez ajude

Sandro Marcell
SMarcell

(usa Slackware)

Enviado em 05/09/2011 - 16:21h

Pesquise sobre "intervalo de endereços" no sed.


7. Re: Como pegar 1ª e última linha de um arquivo ?

Lucas Doná Sfalcin
lucasdona

(usa Linux Mint)

Enviado em 05/09/2011 - 16:35h

pode fazer com 3 passagem de parametro, +- assim

$p1 #caminho do arquivo
$p2 #primeiras linhas
$p3 #ultimas linhas

echo "Primeiras linhas"
head -$p2 $p1
echo "ultimas linhas"
tail -$p3 $p1

---------------------------
a chamada do script ficaria assim:
./script.sh arquivo.txt 3 5

então mostraria pra vc as 3 primeiras linhas e 5 ultimas linhas do arquivo.txt



8. Re: Como pegar 1ª e última linha de um arquivo ?

Alexandre Gonçalves Monteiro da Silva
alexandregms

(usa Ubuntu)

Enviado em 05/09/2011 - 16:54h

Se quiser as 2 primeiras e 2 últimas, você pode usar este script. Caso vc queira aumentar/diminur o numero de linhas de cima para baixo ou vice-versa, basta alterar as condições do "if" e "elif".

#!/bin/bash
cont=1
ultima=`cat $1 | wc -l`

cat $1 | while read i
do

if [ $cont == 1 ] || [ $cont == 2 ]; then

echo $i

elif [ $cont == $ultima ] || [ $cont == `expr $ultima - 1` ]; then

echo $i

fi
let cont++

done




9. Re: Como pegar 1ª e última linha de um arquivo ?

Lucas Doná Sfalcin
lucasdona

(usa Linux Mint)

Enviado em 05/09/2011 - 16:54h

Ai, assim funciona perfeitamente...

_______________________________________________________________
$1 #arquivo a ser lido
$2 #quantidade de linhas iniciais a serem lidas
$3 #quantidade de linhas a serem lidas do final do arquivo

echo "*****Primeiras" $2 "linhas*****"
head -$2 $1
echo "*****Ultimas" $3 "linhas*****"
tail -$3 $1
-------------------------------------------------------------------
daí é só passar as 3 entradas de parametros junto com o comando para executar o script.


10. Pegar 1ªs e últimas linhas de um arquivo

Geraldo Albuquerque
AprendiNoLinux

(usa Ubuntu)

Enviado em 05/09/2011 - 20:33h

Parece que não está dando certo.
Imaginei que a saída seria usar sed, mas não consegui utilizar sem algum tipo de exemplo prático.

Pensei em fazer um contador como sugerido. O problema é que quando o arquivo é grande vai ser lido integralmente. Parece que a solução em sed iria operar sobre o arquivo inteiro.

A ideia é pegar só o início e parar. Pegar o final e parar.
Dúvida: Sempre tem que ler o arquivo inteiro para pegar as primeiras ou últimas linhas ?

Exemplo de como estava tentando:
==================================
#!/bin/bash
# top_fin.sh
# Sintaxe: ./linhas.sh arquivo L1 L2
# $1 #arquivo a ser lido
# $2 #quantidade de linhas iniciais a serem lidas
# $3 #quantidade de linhas a serem lidas do final do arquivo

function top_fim()
{
declare -a _top_fim
echo "*****Primeiras" $2 "linhas*****"
top_fim=$(head -$2 $1)
echo "*****Ultimas" $3 "linhas*****"
top_fim=$(tail -$3 $1)
echo ${top_fim[@]}
return
}

mytopfim=$(top_fim $1 $2 $3)
echo "${mytopfim[@]}"
exit

==========================
Já desisti de tentar usar um comando só. Tá valendo qualquer solução que seja rápida e eficiente.
Sempre lembrando que os arquivos que irão usar esta função podem ser bem grandes.
Por este motivo, pensei em algo que leia só o início (algumas linhas) e o final (algumas linhas)

Obrigado.

oops: Parece que a melhor solução está na sugestão do @lucasdona , mas precisa mudar numeradores dos parametros.



11. Re: Como pegar 1ª e última linha de um arquivo ?

Geraldo Albuquerque
AprendiNoLinux

(usa Ubuntu)

Enviado em 05/09/2011 - 20:35h

Olá @guilherme_yohan , o grep parece que vai ter que ler o arquivo inteiro.


12. Re: Como pegar 1ª e última linha de um arquivo ?

Elder Marco
eldermarco

(usa Fedora)

Enviado em 05/09/2011 - 21:03h

O sed resolve isso fácil e com apenas uma única linha, veja:





$ cat teste.txt
01. Aline Tavares Silva
02. Bruno Delgado Bonfim
03. Carla Garantizado Bela
04. Danilo Servantes
05. Eliane Costa Pinheiro
06. Elivaldo Pereira
07. Fábio Berbert de Paula
08. Felipe Azambuja
09. Gardineu Marques
10. Romário Belleza

$ sed -n '1 p; $ p' teste.txt
01. Aline Tavares Silva
10. Romário Belleza




01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts