Concaténer des fichiers de logs - Codes et scripts - Linux et OS Alternatifs
Marsh Posté le 05-09-2004 à 13:07:03
Code :
|
Cela devrait faire l'affaire
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 :
|
Merci d'avance pour votre aide!
(je débute totalement sous Unix)
Marsh Posté le 27-05-2005 à 16:58:25
déjà tu peux simplifier ta commande sed
$ sed -i '/^$/d' log.txt |
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 ;-)
Marsh Posté le 27-05-2005 à 17:09:18
cat *$MADATE* | sed machin >> fichier_final
ça marche pas çà ?
Marsh Posté le 27-05-2005 à 17:20:41
Je ne veux pas un seul fichier au final, mais un fichier par jour
Marsh Posté le 27-05-2005 à 17:26:11
remplace le nom du fichier final
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
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)
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) :
|
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 |
qui est surement plus beau
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 !!!
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 ?