#1 Le 28/02/2017, à 00:12
- Kasuus
[Résolu] Boucle for et ls - N'avoir qu'un seul résultat
Bonsoir,
Bon j'ai eu beau chercher un peu (Je n'ose pas dire beaucoup même ) mais je ne vois pas comme aborder mon problème.
J'ai le code suivant:
for file in *.txt;
do
occ=$(echo "$file" | sed 's/\[[^]]*\]//' | awk -F 'S[0-9].' '{print $(NF-1)}')
count=$(ls | grep -o "$occ" | wc -l)
echo "Il y a "$count" occurences : "$occ
done
La première partie formate mes fichiers d'une certaine manière pour n'avoir que le nom qui m'intéresse (Sans le modifier au final)
Il compte le nombre de fois ou un fichier revient dans un dossier. (Le code ci dessus fonctionne)
Mais le problème c'est qu'il me ressort les résultats ci dessous:
Il y a 6 occurences : File1
Il y a 6 occurences : File1
Il y a 6 occurences : File1
Il y a 6 occurences : File1
Il y a 6 occurences : File1
Il y a 6 occurences : File1
Il y a 4 occurences : File2
Il y a 4 occurences : File2
Il y a 4 occurences : File2
Il y a 4 occurences : File2
Il y a 4 occurences : File3
Il y a 4 occurences : File3
Il y a 4 occurences : File3
Il y a 4 occurences : File3
Et l’idée est qu'il ne me fournisse que le résultat suivant:
Il y a 6 occurences : File1
Il y a 4 occurences : File2
Il y a 4 occurences : File3
Car le problème c'est que comme je peux avoir énormément de fichier il tourne et retourne pendant un moment....
Tout en rebouclant sur les mêmes fichiers...
J'avais pensé à faire un compteur mais je ne vois pas comment... Avec une boucle while?
Une idée?
Dernière modification par Kasuus (Le 28/02/2017, à 22:51)
Hors ligne
#2 Le 28/02/2017, à 00:29
- Watael
Re : [Résolu] Boucle for et ls - N'avoir qu'un seul résultat
salut,
c'est une mauvaise habitude à perdre rapidement d'utiliser ls ailleurs que dans la console.
fais appel à un tableau et aux globs (Motifs génériques) :
p_count=( ./*$occ* )
count=${#p_count[*]}
et pour trouver occ, il probablement possible de se dispenser de sed et awk au profit de Remplacements des paramètres (cf. man bash)
Dernière modification par Watael (Le 28/02/2017, à 00:29)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#3 Le 28/02/2017, à 07:10
- pingouinux
Re : [Résolu] Boucle for et ls - N'avoir qu'un seul résultat
Bonjour,
Watael a raison, ton script peut certainement être simplifié : il faudrait que tu montres un exemple de fichier.
Pour obtenir le résultat que tu veux avec le script actuel, il suffit de remplacer la dernière ligne par
done | sort -u
Hors ligne
#4 Le 28/02/2017, à 07:19
- Watael
Re : [Résolu] Boucle for et ls - N'avoir qu'un seul résultat
pourquoi ajouter une commande pour masquer un travail qui pourrait/devrait ne pas être fait ?
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#5 Le 28/02/2017, à 07:39
- pingouinux
Re : [Résolu] Boucle for et ls - N'avoir qu'un seul résultat
J'indique une méthode qui n'est qu'un pis aller, et que je ne recommande pas…
Hors ligne
#6 Le 28/02/2017, à 09:13
- Hizoka
Re : [Résolu] Boucle for et ls - N'avoir qu'un seul résultat
Salut,
sinon tu ajoutes une variable liste dans le quel tu ajoutes les fichiers déjà traités au fur et à mesure, ainsi avec un petit test, tu peux sauter les boucles inutiles.
ListeFichiers=()
for file in *.txt;
do
occ=$(echo "$file" | sed 's/\[[^]]*\]//' | awk -F 'S[0-9].' '{print $(NF-1)}') # Arf, pas d'echo... et je pense en effet qu'il y a plus simple => cf Watael
# SI le fichier est déjà dans la liste, on saute le tour sinon on l'ajoute à la liste
grep -i "${occ}" <<< "${ListeFichiers[@]}" && continue || ListeFichiers+=("${occ}")
count=$(ls | grep -o "$occ" | wc -l) # Il faut en effet eviter ls...
echo "Il y a "$count" occurences : "$occ
done
Dernière modification par Hizoka (Le 28/02/2017, à 09:17)
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#7 Le 28/02/2017, à 11:42
- Watael
Re : [Résolu] Boucle for et ls - N'avoir qu'un seul résultat
tiens ? on a Stéphane ET Plaza : « Je dis ça, je dis rien. »
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#8 Le 28/02/2017, à 16:41
- Kasuus
Re : [Résolu] Boucle for et ls - N'avoir qu'un seul résultat
Merci pour vos réponses!
Je teste ça ce soir. Et je vous dis ce qu'il en retourne.
Mais au vue de la réponse de Hizoka c'est quelque chose de semblable que je cherchais!
Je commence à balbutier en script depuis quelques semaines et je me doute que j'ai quelques mauvaises habitudes...
Étant qu'une partie d'un script plus long qui me sert à trier mes films/séries je n'ose pas mettre le script complet car la moitié du forum va faire un arrêt cardiaque
Hors ligne
#9 Le 28/02/2017, à 17:24
- Hizoka
Re : [Résolu] Boucle for et ls - N'avoir qu'un seul résultat
Watael => Pas compris...
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#10 Le 28/02/2017, à 18:03
- Watael
Re : [Résolu] Boucle for et ls - N'avoir qu'un seul résultat
Pingouinux et toi proposez des codes que vous ne recommandez pas.
ça me fait penser à Stéphane Plaza, qui, à longueur d'émissions, répète « je dis ça, je dis rien ».
Dernière modification par Watael (Le 28/02/2017, à 18:29)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#11 Le 28/02/2017, à 18:16
- pingouinux
Re : [Résolu] Boucle for et ls - N'avoir qu'un seul résultat
J'ai proposé en #3 une solution simple qui répond au problème posé, et j'attends que Kasuus montre un exemple de fichier pour essayer de faire mieux.
Hors ligne
#12 Le 28/02/2017, à 18:33
- Watael
Re : [Résolu] Boucle for et ls - N'avoir qu'un seul résultat
je comprends. cependant, ajouter une commande, c'est ajouter de la "complexité", non ?
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#13 Le 28/02/2017, à 18:44
- pingouinux
Re : [Résolu] Boucle for et ls - N'avoir qu'un seul résultat
[HS]Un polytechnicien avait mis au point une théorie pour faire tenir de l'eau dans une passoire. Le jour où on lui a demandé de mettre de l'eau dans une casserole, il y a percé des trous pour être ramené au problème précédent.[/HS]
Hors ligne
#14 Le 28/02/2017, à 18:53
- Watael
Re : [Résolu] Boucle for et ls - N'avoir qu'un seul résultat
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#15 Le 28/02/2017, à 20:37
- Hizoka
Re : [Résolu] Boucle for et ls - N'avoir qu'un seul résultat
Bah, j'ai laissé ses codes, je répondais juste à sa question de base
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#16 Le 28/02/2017, à 22:48
- Kasuus
Re : [Résolu] Boucle for et ls - N'avoir qu'un seul résultat
Merci à vous pour les réponses.
Ca me fait un peu avancer!
J'essaie pour le moment de bidouiller mon script de trie (J'utilise un peu de tout pour appréhender les différentes commandes que j'ai pu apprendre ces dernières semaines.)
Mais je pense que je ferai un post ou je reposterai sur celui ci pour montrer le travail de sagouin que je suis en train de faire afin d'avoir un peu d'aide pour l'optimiser et me montrer mes différentes erreurs...
Hors ligne