[NOOB] Shell avec plusieurs opérations

Résolu/Fermé
Poireau - 28 janv. 2009 à 14:08
 poireau - 30 janv. 2009 à 13:06
Bonjour à tous,

J'ai une petite question de noob mais bon, on a tous commencé un jour non ?

Je voudrais faire un shell qui concatene les fichiers qui s'appellent A110.txt A111.txt etc . et qui ecrit le résulat dans un autre fichier...

je commence comme ça :

#!/bin/bash

for i in A*.txt
do
	cat $i>resultat.txt


Ca me concatene bien, mais la sortie ne me sort que ce qui se trouve sur le premier fichier...

j'ai essayé de faire un sous shell avec les paranthese mais ça ne donne rien.
De la même façon j'ai essayé if et else, pareil nada...
Bref... >Snif!.txt
A voir également:

7 réponses

lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
28 janv. 2009 à 14:53
Salut,

Je pense que tu trouves juste le contenu de dernier fichier
La rédirection > écrase le contenu à chauqe accès

Essaie >> au lieu de >
1
Ca marche,
Tu es juste un génie !! Quand je pense que je viens de passer une nuit blanche dessus...

merci =)
0
Autre petite question (désolé ^^)
le fichier généré contient des ligne qui commencent par "100", "101" etc.

je voubrait faire un grep dynamique de type :
grep "100" fichier.txt |uniq -c |sort -r|cut -f2>N100.txt;
grep "101" fichier.txt |uniq -c |sort -r|cut -f2>N100.txt; etc


mais comment puis je préciser le grep ?? grep "[0-9]" fichier.txt |uniq -c |sort -r|cut -f2>N[0-9].txt; ??
Ca me semble un peu abstrait...
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
28 janv. 2009 à 18:27
Re,

Pour grep 101 c'est N101.txt ?!
Pour grep 102 c'est N102.txt?!
etc.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
28 janv. 2009 à 19:11
Salut,

Pour ton 1er problème, un simple :
cat A*.txt > resultat.txt
aurait amplement suffit ;-))
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
28 janv. 2009 à 19:13
Salut,

Oui, j'ai pensé au début de lui donner ça.
Mais j'ai pensé de lui montrer l'erreur ;-)
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897 > lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019
28 janv. 2009 à 19:17
Salut,

T'as bien fait ;-))

Quelque part le prof que tu a été est toujours là ;-))
0
Avant tout, merci pour vos reponses !!

en fait
cat A*.txt > resultat.txt
ne fonctionne pas a cause de la boucle, les résultats ne s'implementent pas mais en utilisant '>>' ca marche =)

Pour ce qui concerne mon 2eme soucis je veux faire un grep dans une boucle en fait. Je n'etais peux etre pas tres clair dans mon explication

quand je fait
grep "100" fichier.txt |uniq -c |sort -r|cut -f2>N100.txt;
grep "101" fichier.txt |uniq -c |sort -r|cut -f2>N100.txt; 
grep "102" fichier.txt |uniq -c |sort -r|cut -f2>N100.txt;
grep "103" fichier.txt |uniq -c |sort -r|cut -f2>N100.txt; 


Ca marche mais j'ai a peu près 8 000 grep a faire donc c'est un peu long.
Donc je cherche à faire une boucle mais je ne maitrise pas tres bien le langage unix.... (et poutant je potasse !!)

j'aimerais faire quelque chose de ce type :

for i in dossier/A*.csv
do
	grep "^[0-9]" head.txt | sort >B*.csv
done


mais ca ne donne rien....

Je precise que chaque ligne de mes fichiers commencent par des chiifres, cequi explique "^[0-9]" :)
Est ce que j'ai fait une faute d'orthographe dans ma boucle ??
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897 > poireau
28 janv. 2009 à 22:42
La syntaxe "cat A*.txt > resultat.txt" n'est pas à insérer dans une boucle, mais la commande en elle même produit le même résultat que :
for i in "A*.txt"
do
echo $i >> resultat.txt
done
;-))
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
28 janv. 2009 à 21:46
Re,
for i in $(ls dossier/A*.csv)
do
	grep "^[0-9]" $i | sort >B*.csv
done
0
Merci pour la re-réponse :)
arf ca me sort toujours un seul fichier nommé B*.txt snif !
j'essaie d'avoir autant de fichiers B que j'ai de fichiers A

ex : A101 et B101 (B101 étant le resultat du grep)
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569 > poireau
28 janv. 2009 à 22:16
Re,

Ben, oui, je t'ai demandé ici http://www.commentcamarche.net/forum/affich 10739774 noob shell avec plusieurs operations?#4
Mais tu n'as jamais répondu
0
poireau > lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019
28 janv. 2009 à 22:21
Ah OK je n'avais pas compris ta question, je croyais que tu me disais de faire
grep 101 c'est N101.txt puis
grep 102 c'est N102.txt

dc ca faisait beaucoup de grep...
0
J'ai enfin trouvé la solution dc je la poste !

Rappel : le but est de prendre les numero de chaque ligne (qui correspondent a une reference qui peut se repeter) d'un fichier de les classer et le le mettre dans un doc qui s'apelle : le numero du bebut de la ligne.txt.

for i in $(cat monfichier.txt)
do > nada$i.txt
done
# ca genere des fichier vides

for i in $(ls "le dossier ou se trouvent les fichiers" |grep "nada" | sed 's/nada//g")
do cat monfichier.txt |grep "$i" >> Final$i.txt



voilou, merci a ceux qui m'ont aidé =)
0