Pular para o conteúdo

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

Responder tópico
  • Denunciar
  • Indicar
01 02

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

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.

Responder tópico

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

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 ?

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 ?

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 ?

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

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 ?

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 ?

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 ?

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

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 ?

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 ?

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

Responder tópico

Responder tópico

Entre na sua conta para responder.

Fazer login para responder