Précédent   Forum des professionnels en informatique > Systèmes > Linux
Linux Forum d'entraide sur le système Linux. Avant de poster -> Tutoriels Linux, F.A.Q Linux
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 01/07/2011, 10h20   #1
Membre du Club
 
" "
Inscription : janvier 2008
Messages : 204
Détails du profil
Informations professionnelles :
Activité : " "

Informations forums :
Inscription : janvier 2008
Messages : 204
Points : 59
Points : 59
Par défaut compter et afficher

Bonjour, à tous, j'ai un souci d'affichage et j'ai besoin de votre aide, svp
voici mon script

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/bin/bash
 
echo "ID;QSTATUS3;ASK;VIDEO;AUDIO;IMAGE;AUTRE;NBPAGE"
 
for i in `find -type f -name "*.dsc"`
do
	QSTATUS3=`grep "qstatus=v3" $i | wc -l`
	ASK=`grep "ASK" $i | wc -l`
	VIDEO=`grep "FLV" $i | wc -l`
	AUDIO=`grep "MP3" $i | wc -l`
	IMAGE=`grep "IMG" $i | wc -l`
	AUTRE=`grep "BNK" $i | wc -l`
	NBPAGE=`grep "NEWPAGE" $i | grep -v "^//" | wc -l`
 
	echo "${i:2};$ASK;$QSTATUS3;$VIDEO;$AUDIO;$IMAGE;$AUTRE;$NBPAGE"
done
et la sortie j'ai quelque chose comme ça :

.
Code :
1
2
3
4
/nupsell.dsc;50;0;0;0;9;0;40
./1000961v2.dsc;116;9;0;0;1;0;105
./1001518.dsc;32;3;0;0;0;0;25
./1000612.dsc;37;0;0;0;19;0;35
mon probleme: je voulais me debarasser du "./" qui est devant ID
arm3366 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 01/07/2011, 10h46   #2
Expert Confirmé Sénior
 
Avatar de frp31
 
Homme francois
Ingénieur systèmes et réseaux
Inscription : juillet 2006
Messages : 3 534
Détails du profil
Informations personnelles :
Nom : Homme francois
Âge : 35
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : juillet 2006
Messages : 3 534
Points : 7 743
Points : 7 743
substitue "tout ce qui precède le premier / et le slash" par ""

parce que sur la première ligne tu as "/" et pas "./" donc là ça résoud les deux cas.
frp31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/07/2011, 10h52   #3
Expert Confirmé
 
Inscription : janvier 2011
Messages : 970
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2011
Messages : 970
Points : 2 871
Points : 2 871
Salut,

Ta commande find find -type f -name "*.dsc" descend dans des sous-répertoires ou pas ?

Si la réponse est non, alors rajoute "-printf '%f\n'" et tu devrais être tranquille
__________________
$ man woman
Il n'y a pas de page de manuel pour woman.
zipe31 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 01/07/2011, 11h00   #4
Expert Confirmé
 
Inscription : janvier 2011
Messages : 970
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2011
Messages : 970
Points : 2 871
Points : 2 871
Je n'avais pas vu le "${i:2}" qui est sensé enlever le "./".

Tu peux aussi faire avec : ${i/\.\//}
__________________
$ man woman
Il n'y a pas de page de manuel pour woman.
zipe31 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 01/07/2011, 11h02   #5
Membre du Club
 
" "
Inscription : janvier 2008
Messages : 204
Détails du profil
Informations professionnelles :
Activité : " "

Informations forums :
Inscription : janvier 2008
Messages : 204
Points : 59
Points : 59
merci pour vos reponses.

En fait j'ai un repertoire un repertoire qui contient plusieurs types de fichiers et je veux traiter les ceux qui ont extension .dsc,
sinon comment je mets "-printf '%f\n'" et une question: est ce qu'il n'y a pas d'erreur dans ce code parcequ'il ne compte pâs bien
arm3366 est déconnecté   Envoyer un message privé Réponse avec citation 02
Vieux 01/07/2011, 11h09   #6
Expert Confirmé
 
Inscription : janvier 2011
Messages : 970
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2011
Messages : 970
Points : 2 871
Points : 2 871
Citation:
Envoyé par arm3366 Voir le message
sinon comment je mets "-printf '%f\n'"
Code :
find -type f -name "*.dsc" -printf '%f\n'
Citation:
et une question: est ce qu'il n'y a pas d'erreur dans ce code parcequ'il ne compte pâs bien
Ben ça dépend, sans voir les données qui sont traitées et sans savoir le résultat que tu veux obtenir, difficile de se faire une idée
__________________
$ man woman
Il n'y a pas de page de manuel pour woman.
zipe31 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 01/07/2011, 11h17   #7
Membre du Club
 
" "
Inscription : janvier 2008
Messages : 204
Détails du profil
Informations professionnelles :
Activité : " "

Informations forums :
Inscription : janvier 2008
Messages : 204
Points : 59
Points : 59
zipe31 voila ce que ce que j'ai mis à la fin:

Code :
1
2
echo "${i/\.\//};$ASK;$QSTATUS3;$VIDEO;$AUDIO;$IMAGE;$AUTRE;$NBPAGE"
done
j'ai
Code :
1
2
 ID;QSTATUS3;ASK;VIDEO;AUDIO;IMAGE;AUTRE;NBPAGE
dsc.sh: 16: Bad substitution
sachant que la ligne 16 c'est
arm3366 est déconnecté   Envoyer un message privé Réponse avec citation 02
Vieux 01/07/2011, 11h27   #8
Expert Confirmé
 
Inscription : janvier 2011
Messages : 970
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2011
Messages : 970
Points : 2 871
Points : 2 871
Affiche ton code en entier tu dois avoir une m*rdouille ailleurs
__________________
$ man woman
Il n'y a pas de page de manuel pour woman.
zipe31 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 01/07/2011, 11h32   #9
Membre du Club
 
" "
Inscription : janvier 2008
Messages : 204
Détails du profil
Informations professionnelles :
Activité : " "

Informations forums :
Inscription : janvier 2008
Messages : 204
Points : 59
Points : 59
c'est ce mis en tou debut
arm3366 est déconnecté   Envoyer un message privé Réponse avec citation 02
Vieux 01/07/2011, 11h40   #10
Expert Confirmé
 
Inscription : janvier 2011
Messages : 970
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2011
Messages : 970
Points : 2 871
Points : 2 871
Ben c'est comme tu veux, dans ce cas je ne peux rien te dire de plus
__________________
$ man woman
Il n'y a pas de page de manuel pour woman.
zipe31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/07/2011, 11h52   #11
Membre du Club
 
" "
Inscription : janvier 2008
Messages : 204
Détails du profil
Informations professionnelles :
Activité : " "

Informations forums :
Inscription : janvier 2008
Messages : 204
Points : 59
Points : 59
je ne vois ce qui peux t"enerver, t'as demande mon code et l'integralite de mon code est au debut de la discussion, sinon c'est toi comme tu veux!!
arm3366 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 01/07/2011, 12h06   #12
Expert Confirmé
 
Inscription : janvier 2011
Messages : 970
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2011
Messages : 970
Points : 2 871
Points : 2 871
Je ne m'énerve pas... tu viens demander de l'aide, on te file une solution, tu viens dire que ça ne marche pas, on (enfin je) te demande d'afficher ton code (modifié apparemment) et ça a l'air de te demander un effort suprême que de faire un copier/coller, d'où ma démotivation
__________________
$ man woman
Il n'y a pas de page de manuel pour woman.
zipe31 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 01/07/2011, 12h14   #13
Membre du Club
 
" "
Inscription : janvier 2008
Messages : 204
Détails du profil
Informations professionnelles :
Activité : " "

Informations forums :
Inscription : janvier 2008
Messages : 204
Points : 59
Points : 59
j'ai mieux à faire que lire des jeux de mots!!! sinon merci pour ta participation
arm3366 est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 01/07/2011, 12h23   #14
Expert Confirmé Sénior
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 070
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 070
Points : 4 153
Points : 4 153
Bonjour,

ON NE FAIT PAS : for element in $(commande); do, si un nom de fichier contient un des caractères de l'IFS, ça bouclera sur chaque mot du nom du fichier en cause.

Alors, c'est soit :
Code :
for element in ./*; do if [ -f "$element" ]; then ...; fi; done
soit :
Code :
 find -type f -exec ... \;
en gros.

Montre-nous comment tu fais pour exécuter ton script.
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/07/2011, 12h42   #15
Membre du Club
 
" "
Inscription : janvier 2008
Messages : 204
Détails du profil
Informations professionnelles :
Activité : " "

Informations forums :
Inscription : janvier 2008
Messages : 204
Points : 59
Points : 59
Merci N_BaH pour executer je fait sh dsc.sh
arm3366 est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 01/07/2011, 12h52   #16
Membre du Club
 
" "
Inscription : janvier 2008
Messages : 204
Détails du profil
Informations professionnelles :
Activité : " "

Informations forums :
Inscription : janvier 2008
Messages : 204
Points : 59
Points : 59
et pourtant ma boucle marche,

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/bin/bash
 
echo "ID;QSTATUS3;ASK;VIDEO;AUDIO;IMAGE;AUTRE;NBPAGE"
 
for i in `find -type f -name "*.dsc"`
do
        QSTATUS3=`grep "qstatus=v3" $i | wc -l`
        ASK=`grep "ASK" $i | wc -l`
        VIDEO=`grep "FLV" $i | wc -l`
        AUDIO=`grep "MP3" $i | wc -l`
        IMAGE=`grep "IMG" $i | wc -l`
        AUTRE=`grep "BNK" $i | wc -l`
        NBPAGE=`grep "NEWPAGE" $i | grep -v "^//" | wc -l`
        #print "-printf '%f\n'" 
        echo "${i};$ASK;$QSTATUS3;$VIDEO;$AUDIO;$IMAGE;$AUTRE;$NBPAGE"
done
mais il y a deux soucis:
1_ les resulats de des calculs se sont exactes comparée à ceux que j'ai eu par la main
_ dans l'affichage j'ai quelqu chose comme
Code :
1
2
3
4
/nupsell.dsc;50;0;0;0;9;0;40
./1000961v2.dsc;116;9;0;0;1;0;105
./1001518.dsc;32;3;0;0;0;0;25
./1000612.dsc;37;0;0;0;19;0;35
et je voudrais me debarasé d ./
Remarque: je saute toutes les lignes commaçant par un //
arm3366 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/07/2011, 13h11   #17
Expert Confirmé Sénior
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 070
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 070
Points : 4 153
Points : 4 153
eh, oui, voilà pourquoi la substitution ne fonctionne pas : sh est probablement un lien vers dash, ou autre "strictement POSIX".

un script se lance de la même manière qu'une commande normale : /chemin/commande, si /chemin n'est pas dans la variable PATH.

Si ton script est dans le répertoire courant, alors ./nomScript.


-printf est une option/commande de find !
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/07/2011, 14h13   #18
Membre émérite
 
Avatar de Pouic
 
Inscription : octobre 2004
Messages : 668
Détails du profil
Informations personnelles :
Âge : 28
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : octobre 2004
Messages : 668
Points : 904
Points : 904
euh, pour virer le "./" initial, un
devrait suffire.
__________________
Software becomes slower faster than hardware becomes faster

http://xrenault.developpez.com
API C standard (C ANSI )
Pouic est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 01/07/2011, 14h31   #19
Membre du Club
 
" "
Inscription : janvier 2008
Messages : 204
Détails du profil
Informations professionnelles :
Activité : " "

Informations forums :
Inscription : janvier 2008
Messages : 204
Points : 59
Points : 59
le regle bien le probleme du ./ merci tout le monde

Mais par contre ce que je ne comprends pas , c'est les erreurs dans le calcul, sachant que :
j'ouvre le fichier et je compte des occurences en ignorant les lignes commençant par un //
arm3366 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/07/2011, 15h32   #20
Membre émérite
 
Avatar de Pouic
 
Inscription : octobre 2004
Messages : 668
Détails du profil
Informations personnelles :
Âge : 28
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : octobre 2004
Messages : 668
Points : 904
Points : 904
Cela dit, personnellement, j'aurai fait un truc comme ça pour répondre à ton besoin (en complétant les expressions pour avoir tout ce que tu veux, et éventuellement aussi ne pas compter si tu as plusieurs occurences de la même chose sur une seule ligne) :
Code :
find . -type f -name "*.dsc" -exec awk 'BEGIN{ask=qstatus=0} ($1 ~ /\/\//){next} /qstatus=v3/{qstatus++} /ASK/{ask++} END{print FILENAME " " qstatus";"ask";"}' {} \; | sed 's,./,,'
__________________
Software becomes slower faster than hardware becomes faster

http://xrenault.developpez.com
API C standard (C ANSI )
Pouic est déconnecté   Envoyer un message privé Réponse avec citation 20
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h57.


 
 
 
 
Partenaires

Hébergement Web