Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 28/02/2017, à 01: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 hmm ) 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.... hmm
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, à 23:51)

Hors ligne

#2 Le 28/02/2017, à 01: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, à 01:29)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#3 Le 28/02/2017, à 08: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, à 08: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, à 08: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… smile

Hors ligne

#6 Le 28/02/2017, à 10: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, à 10:17)


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#7 Le 28/02/2017, à 12: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, à 17: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... hmm
É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 big_smile

Hors ligne

#9 Le 28/02/2017, à 18: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, à 19: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, à 19:29)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#11 Le 28/02/2017, à 19: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, à 19: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, à 19: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, à 19:53

Watael

Re : [Résolu] Boucle for et ls - N'avoir qu'un seul résultat

lol


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#15 Le 28/02/2017, à 21: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 tongue


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#16 Le 28/02/2017, à 23: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... big_smile

Hors ligne