Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 14/12/2010, 08h16   #1
Membre éprouvé
 
Homme Cyrill Gremaud
Ingénieur systèmes et réseaux
Inscription : août 2005
Messages : 1 002
Détails du profil
Informations personnelles :
Nom : Homme Cyrill Gremaud
Âge : 23
Localisation : Suisse

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux
Secteur : Enseignement

Informations forums :
Inscription : août 2005
Messages : 1 002
Points : 429
Points : 429
Par défaut [AWK] débutant et problème

Bonjour à tous,

dans le cadre d'un cours, je dois faire des petits script combinant le bash et le AWK et là je me trouve confronté a un soucis. Le script ci-dessous fonctionne

Code :
1
2
3
4
5
6
7
8
9
#!/bin/sh
 
# This script will generate a html page with the output with analyze-apache-log.sh
#-------------------------------------------------------------------------------------------------------------------
 
echo "<html><head><title>WebAnalyzeLog - "$1"</title></head>" > "$2"html_log.html
echo "<body><b>The ten most popular pages in the file "$1" were</b><br /><br /><table border="0"><tr><td><b>Number</b></td><td><b>URL</b></td></tr>" >> "$2"html_log.html
./analyze-apache-log.sh $1 | awk 'NR > 9 && NR < 20 {printf "<tr><td>"$1"</td><td>"$2"</td></tr>" }' >> "$2"html_log.html 
echo "</table></body></html>" >> "$2"html_log.html
Ce code prend comme argument un fichier de log ainsi qu'un dossier de destination et j'utilise un autre script (analyze-apache-log.sh) pour traiter un fichier de log et je met tout sa dans une page HTML.

Maintenant je dois faire la même chose seulement je ne donne plus en paramètre le fichier de log mais juste la destination et dans mon fichier je dois créer une variable qui contient le dossier où se trouvent les LOG (il y en a plusieurs) et je dois générer une page HTML comme avant mais pour chaque host. Voici ce que j'ai comme boucle

Code :
ls ./log/ | awk '{for(i=1; i<=NF; i++) ??? }'
Je ne vous ai pas mis le code complet car je test en ligne de commande mais ma question est qu'à la place des ??? j'aimerai appeler mon fichier analyze-apache-log.sh et je n'y arrive pas.

merci de m'aider
__________________
Il y a 10 types de personnes sur la planète. Ceux qui comprennent le binaire et ceux qui ne le comprennent pas...
cyrill.gremaud est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2010, 08h49   #2
Membre éprouvé
 
Homme Cyrill Gremaud
Ingénieur systèmes et réseaux
Inscription : août 2005
Messages : 1 002
Détails du profil
Informations personnelles :
Nom : Homme Cyrill Gremaud
Âge : 23
Localisation : Suisse

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux
Secteur : Enseignement

Informations forums :
Inscription : août 2005
Messages : 1 002
Points : 429
Points : 429
En faite voici ce que j'aimerai faire

Code :
ls ./log/ | awk '{for(i=1; i<=NF; i++)print $1}' > test.txt | ./analyze-apache-log.sh awk '{print $NF}' test.txt
dans mon fichier test.txt, j'ai un fichier .log sur chaque ligne donc sa c'est bon et ensuite j'aimerai déjà essayer de donner chaque ligne comme paramètres à mon fichier .sh mais je ne comprend pas comment faire
__________________
Il y a 10 types de personnes sur la planète. Ceux qui comprennent le binaire et ceux qui ne le comprennent pas...
cyrill.gremaud est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2010, 16h53   #3
Expert Confirmé Sénior
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 061
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 061
Points : 4 120
Points : 4 120
Bonjour,

il ne faut pas utiliser ls dans les scripts : imagine qu'un de tes fichiers s'appelle "mon fichier"...
en ligne de commande, c'est pratique
dans un script, c'est pourri.

Code :
awk '{for(i=1; i<=NF; i++)print $1}'
ça veut dire écrire le premier champs de la ligne autant de fois qu'il y a de champs

Code :
1
2
3
4
5
6
7
#!/bin/bash
 
laousontmesLogs=./log
 
for log in $laousontmeslogs/*
do echo "$log"
done
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h56.


 
 
 
 
Partenaires

Hébergement Web