Unir Arquivo/Qtd Linha [RESOLVIDO]

1. Unir Arquivo/Qtd Linha [RESOLVIDO]

Júnior
jrsantossm

(usa Fedora)

Enviado em 11/05/2012 - 15:52h

Boa tarde Galera,

Algém pode me ajudar com um ScriptShell ( Sou Novo ).

Problema:

Tenho em um diretório alguns arquivos que preciso unir em um unico, mas tenho que colocar um filtro para por exempo unir os arquivo com o nome ACB*.txt. No final preciso pegar a quantidade de linha e adicionar no final no meu arquivo.

Ex:
1 Teste
2 Tetse
9 Tete
------------
12


Alguém pode me ajudar?


Para unir eu conseguir cat arquivo1, arquivo2 >> arquivofinal.txt

mas os outros não conseguir.


  


2. Re: Unir Arquivo/Qtd Linha [RESOLVIDO]

André Canhadas
andrecanhadas

(usa Debian)

Enviado em 11/05/2012 - 16:09h

jrsantossm escreveu:

Boa tarde Galera,

Algém pode me ajudar com um ScriptShell ( Sou Novo ).

Problema:

Tenho em um diretório alguns arquivos que preciso unir em um unico, mas tenho que colocar um filtro para por exempo unir os arquivo com o nome ACB*.txt. No final preciso pegar a quantidade de linha e adicionar no final no meu arquivo.

Ex:
1 Teste
2 Tetse
9 Tete
------------
12


Alguém pode me ajudar?


Para unir eu conseguir cat arquivo1, arquivo2 >> arquivofinal.txt

mas os outros não conseguir.


cat -n arquivo.txt

Para mais de uma lida no man do cat:

man cat





3. Re: Unir Arquivo/Qtd Linha [RESOLVIDO]

Renato Carneiro Pacheco
renato_pacheco

(usa Debian)

Enviado em 11/05/2012 - 16:12h


cat -n arquivo.txt
wc -l arquivo.txt >> arquivofinal.txt



4. Re: Unir Arquivo/Qtd Linha [RESOLVIDO]

Alexandre Gonçalves Monteiro da Silva
alexandregms

(usa Ubuntu)

Enviado em 11/05/2012 - 19:31h

Vc quer contar o numero de arquivos de um diretorio e jogar esta saída em um arquivo?
Se entendi, vc deveria fazer algo assim:

ls -lC1 /sua_pasta > arquivo.txt

Para contar, faça o que os colegas acima citaram.

Vc disse que deseja filtrar um determinado tipo de arquivo, mas não entendi exatamente como ele deve iniciar/terminar e qual extensão vc deseja usar. Se puder detalhar um pouco mais ajudaria..


5. Ôpa Galera

Júnior
jrsantossm

(usa Fedora)

Enviado em 13/05/2012 - 08:26h

Pacheco valeu. era isso mesmo para contar as linhas do arquivo.

Então, Alexandre eu preciso pegar todos os arquivos que tenha por exemplo test.txt, juntar e contar as linhas em um arquivo final. Exemplo:


Arquivos:
1 - abctestabc.txt: esse tem por exemplo 2 linhas.
2 - dfgtest.txt: esse tem por exemplo 3 linhas.
3 - testabc.txt: esse tem por exemplo 1 linhas.
4 - abcabc.txt: esse tem por exemplo 5 linhas.


ArquivoFinal.txt Com todas as linhas dos arquivos 1, 2 e 3, pois queria todos os arquivos que tenha a palavra test. totalizando 6 linhas no arquivo final.





6. Re: Unir Arquivo/Qtd Linha [RESOLVIDO]

Alexandre Gonçalves Monteiro da Silva
alexandregms

(usa Ubuntu)

Enviado em 14/05/2012 - 12:41h

Bom, vamos la entao..
Estou mandando localizar todos os arquivos que estão apenas no diretorio corrente (opção 'maxdepth -1' do find) e todos os arquivos que contenha a palavra test em seu nome (usei a opção -iname para case-sensitive).
O log com a saída (arquivo_final.txt) será sempre removido ao executar o script (caso não queira, basta comentar a linha que inicia com test).



#!/bin/bash

LOG="arquivo_final.txt"

test -f $LOG && rm -f $LOG

find . -maxdepth 1 -iname '*test*' | while read line
do

echo "Arquivo $line --> $(wc -l $line | cut -d' ' -f1) linhas" >> $LOG

done

CONT=$(awk '{print $4}' $LOG | paste -sd+ | bc)

echo "Total de linhas: $CONT" >> $LOG



7. Re: Unir Arquivo/Qtd Linha [RESOLVIDO]

Geraldo Albuquerque
AprendiNoLinux

(usa Ubuntu)

Enviado em 14/05/2012 - 12:48h

alexandregms escreveu:

Bom, vamos la entao..
Estou mandando localizar todos os arquivos que estão apenas no diretorio corrente (opção 'maxdepth -1' do find) e todos os arquivos que contenha a palavra test em seu nome (usei a opção -iname para case-sensitive).
O log com a saída (arquivo_final.txt) será sempre removido ao executar o script (caso não queira, basta comentar a linha que inicia com test).



#!/bin/bash

LOG="arquivo_final.txt"

test -f $LOG && rm -f $LOG

find . -maxdepth 1 -iname '*test*' | while read line
do

echo "Arquivo $line --> $(wc -l $line | cut -d' ' -f1) linhas" >> $LOG

done

CONT=$(awk '{print $4}' $LOG | paste -sd+ | bc)

echo "Total de linhas: $CONT" >> $LOG


Muito legal a sua solução @alexandregms
O ls era insustentável neste caso. O grep ou egrep não trabalha legal em nomes de arquivos quando a âncora não está na parte inicial. Embora possa ser usado algum regex complicado. Então, o find foi show de bola. Preciso aprender mais sobre ele. ;)
Parece que o desempenho em termos de velocidade ficou bom também. ;) Caso tenha muitos arquivos no diretório, pode-se usar xargs.



8. Re: Unir Arquivo/Qtd Linha [RESOLVIDO]

Alexandre Gonçalves Monteiro da Silva
alexandregms

(usa Ubuntu)

Enviado em 14/05/2012 - 15:33h

É @AprendiNoLinux, muita coisa eu aprendi aqui no VOL.
Acessar fóruns e responder questões técnicas ajuda mto o caboclo a se aprimorar! Mas muitos caras aqui do VOL são feras e dominam Linux mais do que vários 'especialistas' que vemos nas corporações do Brasil.


9. Re Unir Arquivo/Qtd Linha

Júnior
jrsantossm

(usa Fedora)

Enviado em 15/05/2012 - 08:58h

Alexandre muito obrigado pela ajuda, valeu...


ah e essa dica com certeza vou seguir....

É @AprendiNoLinux, muita coisa eu aprendi aqui no VOL.
Acessar fóruns e responder questões técnicas ajuda mto o caboclo a se aprimorar! Mas muitos caras aqui do VOL são feras e dominam Linux mais do que vários 'especialistas' que vemos nas corporações do Brasil.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts