Pegar somente penúltima linha de vários arquivos txt com nomes semelhantes. [RESOLVIDO]

1. Pegar somente penúltima linha de vários arquivos txt com nomes semelhantes. [RESOLVIDO]

Júlio César Delúcia
jdelucia

(usa CentOS)

Enviado em 07/02/2017 - 14:22h

Boa tarde.

Meu problema é o seguinte: tenho vários arquivos texto com diferentes quantidades de linhas, mas, sempre a penúltima é a única informação que desejo.
São em torno de 290 arquivos e eu gostaria de adicionar somente a penúltima linha de cada um deles em um novo arquivo, variando automaticamente o nome dos arquivos.
Tentei alguma coisa com tail, com sed, mas como sou um tanto quanto leigo, não consegui especificamente o que eu quero.

Com o tail eu consegui as duas últimas linhas, mas não especificamente a penúltima.

Os arquivos contêm especificamente um dir de um diretório do windows e o nome do arquivo varia conforme o nome da máquina em que esse dir foi executado. Então o nome do arquivo ficou assim: coleta_"nomedamaquina"_D_Email.txt

Eu gostaria de variar esse nome automaticamente para não ter que executar o comando arquivo por arquivo.

Sei que deve ser bem fácil, mas não estou obtendo êxito.

Aguardo retorno!

Obrigado e abraço!


  


2. MELHOR RESPOSTA

Perfil removido
removido

(usa Nenhuma)

Enviado em 07/02/2017 - 22:30h

Boa noite!

sed -s 'x;$!d' * > /tmp/tudo.txt 


3. Re: Pegar somente penúltima linha de vários arquivos txt com nomes semelhantes. [RESOLVIDO]

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 07/02/2017 - 14:37h

jdelucia escreveu:

Boa tarde.

Meu problema é o seguinte: tenho vários arquivos texto com diferentes quantidades de linhas, mas, sempre a penúltima é a única informação que desejo.
São em torno de 290 arquivos e eu gostaria de adicionar somente a penúltima linha de cada um deles em um novo arquivo, variando automaticamente o nome dos arquivos.
Tentei alguma coisa com tail, com sed, mas como sou um tanto quanto leigo, não consegui especificamente o que eu quero.

Com o tail eu consegui as duas últimas linhas, mas não especificamente a penúltima.

Os arquivos contêm especificamente um dir de um diretório do windows e o nome do arquivo varia conforme o nome da máquina em que esse dir foi executado. Então o nome do arquivo ficou assim: coleta_"nomedamaquina"_D_Email.txt

Eu gostaria de variar esse nome automaticamente para não ter que executar o comando arquivo por arquivo.

Sei que deve ser bem fácil, mas não estou obtendo êxito.

Aguardo retorno!

Obrigado e abraço!


para pegar a penúltima linha vc usa o tail e depois o head

EX:
cat arquivo.txt | tail -2 | head -1 


o tail retornou as 2 ultimas e depois o head retornou a primeira das duas últimas !!!
_______________________________________________________________
" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"


4. Re: Pegar somente penúltima linha de vários arquivos txt com nomes semelhantes.

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 07/02/2017 - 14:49h

jdelucia escreveu:

Boa tarde.

Meu problema é o seguinte: tenho vários arquivos texto com diferentes quantidades de linhas, mas, sempre a penúltima é a única informação que desejo.
São em torno de 290 arquivos e eu gostaria de adicionar somente a penúltima linha de cada um deles em um novo arquivo, variando automaticamente o nome dos arquivos.
Tentei alguma coisa com tail, com sed, mas como sou um tanto quanto leigo, não consegui especificamente o que eu quero.

Com o tail eu consegui as duas últimas linhas, mas não especificamente a penúltima.

Os arquivos contêm especificamente um dir de um diretório do windows e o nome do arquivo varia conforme o nome da máquina em que esse dir foi executado. Então o nome do arquivo ficou assim: coleta_"nomedamaquina"_D_Email.txt

Eu gostaria de variar esse nome automaticamente para não ter que executar o comando arquivo por arquivo.

Sei que deve ser bem fácil, mas não estou obtendo êxito.

Aguardo retorno!

Obrigado e abraço!


Boa tarde.
Para "pegar" a penultima linha, use o tail -n2|head -n1.
Exemplo:
echo -e "\nLINHA_"{01..10}|tail -n2|head -n1 

Ou

UL=$(($(awk 'END{print NR}' ARQUIVO)-1))
awk 'NR=='"$UL"'{print $0}' ARQUIVO


cat ARQUIVO
linha 1
linha 2
linha 3
linha 4
linha 5
linha 6
linha 7
linha 8
linha 9
linha 10



marcelo oliver




5. Como variar o nome do arquivo?

Júlio César Delúcia
jdelucia

(usa CentOS)

Enviado em 07/02/2017 - 15:12h

Mauriciodez escreveu:

jdelucia escreveu:

Boa tarde.

Meu problema é o seguinte: tenho vários arquivos texto com diferentes quantidades de linhas, mas, sempre a penúltima é a única informação que desejo.
São em torno de 290 arquivos e eu gostaria de adicionar somente a penúltima linha de cada um deles em um novo arquivo, variando automaticamente o nome dos arquivos.
Tentei alguma coisa com tail, com sed, mas como sou um tanto quanto leigo, não consegui especificamente o que eu quero.

Com o tail eu consegui as duas últimas linhas, mas não especificamente a penúltima.

Os arquivos contêm especificamente um dir de um diretório do windows e o nome do arquivo varia conforme o nome da máquina em que esse dir foi executado. Então o nome do arquivo ficou assim: coleta_"nomedamaquina"_D_Email.txt

Eu gostaria de variar esse nome automaticamente para não ter que executar o comando arquivo por arquivo.

Sei que deve ser bem fácil, mas não estou obtendo êxito.

Aguardo retorno!

Obrigado e abraço!


para pegar a penúltima linha vc usa o tail e depois o head

EX:
cat arquivo.txt | tail -2 | head -1 


o tail retornou as 2 ultimas e depois o head retornou a primeira das duas últimas !!!
_______________________________________________________________
" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"



OK, o tail e o head deram certo, mas eu tenho mais de 200 arquivos e não quero fazer um por um.

Por exemplo, ao invés de:
cat arquivo1.txt | tail -2 | head -1 > tudo.txt
cat arquivo2.txt | tail -2 | head -1 > tudo.txt

seria: cat arquivo*.txt | tail -2 | head -1 > tudo.txt

quero que ele passe automaticamente em todos os arquivos do diretório.

No aguardo e obrigado mais uma vez.


6. Re: Pegar somente penúltima linha de vários arquivos txt com nomes semelhantes. [RESOLVIDO]

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 07/02/2017 - 19:00h

jdelucia escreveu:
quero que ele passe automaticamente em todos os arquivos do diretório.
No aguardo e obrigado mais uma vez.


testei aqui com 2 arquivos 'txt' no dietório e funcionou

find /caminho/do/diretório -iname *.txt -exec tail -2 {} \;| sed -n 'N;s/\(.*\)\n.*/impar: \1/p' 


_______________________________________________________________
" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"


7. Re: Pegar somente penúltima linha de vários arquivos txt com nomes semelhantes. [RESOLVIDO]

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 07/02/2017 - 22:42h

amarildosertorio escreveu:

sed -s 'x;$!d' * > /tmp/tudo.txt


kkkkkkkkkk .. fala sério ... mais simples impossível ... show de bola !!! quem sabe sabe ... traduz o sed aí !!!
_______________________________________________________________
" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"


8. Re: Pegar somente penúltima linha de vários arquivos txt com nomes semelhantes.

Perfil removido
removido

(usa Nenhuma)

Enviado em 07/02/2017 - 23:18h

sed -s considerar arquivos separadamente.
sed 'x' insere uma linha em branco.
sed '$!d' imprime a ultima linha do arquivo.

$ cat teste.txt
a1
b2
c3


$ sed 'x' teste.txt

a1
b2


$ sed '$!d' teste.txt
c3 


$ sed 'x;$!d' teste.txt
b2 



9. Re: Pegar somente penúltima linha de vários arquivos txt com nomes semelhantes. [RESOLVIDO]

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 07/02/2017 - 23:31h

[quote]amarildosertorio escreveu:
sed 'x;' insere uma linha em branco.
$ sed 'x;' teste.txt

a1
b2


viajei nesse comando ... insere uma linha em branco tudo bem mas ele tb excluiu a última original não ????

_______________________________________________________________
" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"


10. Re: Pegar somente penúltima linha de vários arquivos txt com nomes semelhantes. [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 07/02/2017 - 23:35h

man sed
x      Exchange the contents of the hold and pattern spaces. 



11. Re: Pegar somente penúltima linha de vários arquivos txt com nomes semelhantes. [RESOLVIDO]

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 07/02/2017 - 23:46h

amarildosertorio escreveu:

$ man sed
x      Exchange the contents of the hold and pattern spaces. 


Dr. o help ficou pior ainda, meu inglezinho é duro e o google tradutor é pior do q eu !!

eu só entendi q ele troca o conteúdo de 'alguma coisa' por espaço padrão .. é isso ?
_______________________________________________________________
" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"


12. Re: Pegar somente penúltima linha de vários arquivos txt com nomes semelhantes.

Perfil removido
removido

(usa Nenhuma)

Enviado em 08/02/2017 - 00:11h

Realmente o manual não trouxe um bom entendimento. O "x" está entre os comandos que aceitam intervalos de endereço e realiza uma troca de contexto. Visualmente é mais esclarecedor.

Talvez alguém possa contextualizar melhor que eu. ;)




01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts