Concaténer des fichiers de logs

Concaténer des fichiers de logs - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 05-09-2004 à 13:00:45    

J'ai un ensemble de fichiers de logs nommés log-DD-MM-YYYY.log Je voudrai n'en faire qu'un fichier. Je suppose que c'est une opération courante mais je n'ai pas trouvé comment faire. Quelqu'un peut m'aider ? :hello:

Reply

Marsh Posté le 05-09-2004 à 13:00:45   

Reply

Marsh Posté le 05-09-2004 à 13:07:03    

Code :
  1. for i in log-*.log ; do
  2.   cat $i >> fichier_final.log
  3. done


 
Cela devrait faire l'affaire :)


Message édité par krtek le 05-09-2004 à 13:07:23
Reply

Marsh Posté le 05-09-2004 à 13:18:22    

Merci beaucoup ! ;)

Reply

Marsh Posté le 14-09-2004 à 16:17:26    

tu avais cat log-*.log > fichier_final.log

Reply

Marsh Posté le 27-05-2005 à 16:36:30    

Bonjour,  
 
je me permets de faire remonter ce thread car j'ai à peu près la même problème, mais en un poil plus complexe...  ;)  
 
J'ai un hébergeur (dont je tairai le nom) qui me génère un log par heure (+ de 3000 fichiers depuis janvier), et je souhaite concaténer tout ça en un log par jour.
 
Voila le format de mes fichiers :
 
toto.txt-yyyymmjj-hhmm  
 
et j'aimerais en sortie :
 
toto-yyyymmjj.log
 
La où ça se complique un peu c'est que mon cher hébergeur génère des lignes vides (ou plutot des lignes avec des espaces ou des tabs, bref des lignes bizarres)  au milieu des fichiers de logs, j'en profite donc pour filtrer ces lignes inutiles au moment de concaténer au moyen de sed (qui filtre toutes les lignes ou ya pas de chiffres, étant donné que chaque ligne de log commence par une IP ça le fait bien) :
 

Code :
  1. cat $myfile | sed -e '/^[^0-9]/d' >> toto-${mydate}.log


 
 
Merci d'avance pour votre aide!
 
(je débute totalement sous Unix)

Reply

Marsh Posté le 27-05-2005 à 16:58:25    

déjà tu peux simplifier ta commande sed

$ sed -i '/^$/d' log.txt


Message édité par ory le 27-05-2005 à 16:58:35
Reply

Marsh Posté le 27-05-2005 à 17:04:10    

nan c'est ce que j'avais fais au début mais ça ne fonctionne pas car ce ne sont pas que des "simples" lignes vides mais des lignes batardes de je ne sais quoi (probablement un mix d'espaces et de tabulations)...
 
Bref ça m'a bien gonflé et j'ai fini par faire comme ça car de toute manière chaque ligne de log commence par une IP.
 
Merci quand même pour le conseil, mais mon réel problème ne vient pas du sed mais de la concaténation de mes logs ;-)

Reply

Marsh Posté le 27-05-2005 à 17:09:18    

cat *$MADATE* | sed machin >> fichier_final
 
ça marche pas çà ?


---------------
Celui qui pose une question est idiot 5 minutes. Celui qui n'en pose pas le reste toute sa vie. |  Membre du grand complot pharmaceutico-médico-scientifico-judéo-maçonnique.
Reply

Marsh Posté le 27-05-2005 à 17:20:41    

Je ne veux pas un seul fichier au final, mais un fichier par jour ;)

Reply

Marsh Posté le 27-05-2005 à 17:26:11    

remplace le nom du fichier final :spamafote:
 
mais je suis pas sur d'avoir bien compris ; tu veux le faire une fois pour toute ou ce sera une tâche journaliére ?
 
dansle 2° cas, il suffit de créer une variable MADATE=`date +%Y%m%d` et le script moulinera sur toute les entrées de la date du jour


---------------
Celui qui pose une question est idiot 5 minutes. Celui qui n'en pose pas le reste toute sa vie. |  Membre du grand complot pharmaceutico-médico-scientifico-judéo-maçonnique.
Reply

Marsh Posté le 27-05-2005 à 17:26:11   

Reply

Marsh Posté le 27-05-2005 à 17:33:27    

ça va etre une tache journalière mais le bout de code qui concatène au fur et à mesure est déjà implémenté et fonctionne très bien.
 
Seulement vu que je débarque avec des logs depuis décembre 2004 je dois aussi effectuer cette tache une fois pour toute (concaténer tous mes logs horaires en un log/jour) :)


Message édité par SnowKhan le 27-05-2005 à 17:34:00
Reply

Marsh Posté le 27-05-2005 à 17:45:56    

j'ai bien une idée, mais elle est un peu compliqué et je pense qu'il y a plus simple.
 
tu listes tout tes fichier et tu envoies la liste dans un fichier, tu coupes la partie qui contient la date et tu l'envoies dans un autre fichier. Tu élimines les doublons.
 
Tu as donc un fichier qui contient chaque date qu'il te suffit de donner à manger à ton script en le parsant ligne par ligne.
 
ce qui donne un truc de genre (très moche, très pas optimisé voir inutilisable) :


ls |cut -d"-" -f 2|uniq > fichier1.txt
 
for DATE in `cat fichier1.txt`; do
cat *$DATE* | sed machin >> /autre_chemin/toto-$DATE.log
done


 
EDIT : je précise, c'est un bout d'exemple, pas optimisé du tout, probablement très moche.
 
Il est peut-être possible de faire :
 

for DATE in `ls |cut -d"-" -f 2|uniq`; do
cat *$DATE* | sed machin >> /autre_chemin/toto-$DATE.log
done


 
qui est surement plus beau


Message édité par Mjules le 27-05-2005 à 17:48:13

---------------
Celui qui pose une question est idiot 5 minutes. Celui qui n'en pose pas le reste toute sa vie. |  Membre du grand complot pharmaceutico-médico-scientifico-judéo-maçonnique.
Reply

Marsh Posté le 27-05-2005 à 17:51:02    

merci beaucoup !
 
je vais essayer tout ça...
 
ne t'inquiète pas pour l'optimisation, vu mon niveau c'est pas vraiment mon soucis principal !!!

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed