shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] concatenar arquivos


From: Gustavo Chaves
Subject: Re: [shell-script] concatenar arquivos
Date: 21 Apr 2005 23:03:35 -0300
User-agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.4

>>>>> On Thu, 21 Apr 2005 21:12:26 -0300 (ART), Marcus Vinicius 
>>>>> <address@hidden> said:

  > Pessoa,
 
  > Eu tenho um diretorio com alguns arquivos como segue abaixo:
 
  > access_log 
  > access_log.1 
  > access_log.2
  > access_log.3 
  > access_log.4
  > access_log_dia    *obs : este arquivo não me interessa
 
  > Eu queria fazer um script que concatena-se este arquivos formando um 
arquivo só.
 
  > Eu geralmente rodo o cat algumas vezes e resolve.
  > cat access_log.4 access_log.3 > logao 
  > cat access_log.3 >> logao 
  > cat access_log.2 >> logao 
  > cat access_log.1 >> logao 
  > cat access_log >> logao 
 
  > Como eu faria para concatenar todos os arquivos de uma vez observando que 
eles devem sempre ser concatenados na ordem?, por exemplo, no caso acima 
obrigatoriamente precisa ser primeiro o access_log.4, depois o access_log.3 , 
access_log.2 e assim por diante até chegar no access_log apenas.
 
  > Neste diretório também não tem uma quantidade de arquivos fixa, pode ter 4 
, 10, 12 , Não da para saber.
 
  > Alguem pode me ajudar com algum script ou comando que faça isso?
 
Experimente o seguinte comando, supondo que você esteja no diretório
que contém os logs:

  ls | egrep '^access_log(\.[0-9]+)?$' | sort -t. -k 2nr | xargs cat >logao

O egrep vai filtrar do resultado do ls apenas os arquivos que você
quer concatenar.  O sort vai ordená-los como você quer, i.e.,
numericamente na ordem inversa, deixando o arquivo sem extensão por
último.  O xargs pega a lista de arquivos e os passa como argumento
para o cat, cujo resultado final é jogado no arquivo logao.

BTW, supondo, também, que você esteja usando o sort do GNU.  Nem todos
os comandos sort aceitam os argumentos -t e -k.

Gustavo.


reply via email to

[Prev in Thread] Current Thread [Next in Thread]