Pages : 1
#1 Le 28/11/2012, à 23:33
- kev0989
script bash debutant
Bonjour a tous,
Je m'excuse d'avance pour les fautes d'accents et de c cedille mais j'ecrit depuis un clavier qwerty.
Je souhaite realiser un script bash mais je n'ai debute ubuntu qu'il y a deux jours. Je suis a l'heure actuelle plonge dans les tutoriaux mais j'ai peur de ne pas y arriver a temps. Le script que je souhaite realiser devra effectuer le travail suivant:
-J'ai dans un dossier une serie de fichiers, tous nommes plus ou moins de la meme facon. ils se nomment par exemple X01.01, X01.02 , X01.03, X02.01 , ... (bref Xi.j) Les deux nombres i,j separes d'un point sont importants et je souhaiterais pouvoir les recuperer et les stocker dans un fichier. Par exemple faire un tableau
01 01
01 02
01 03
02 01
ou tous les couples sont stockes sous forme d'un ou de deux colonnes.
-Ces fameux fichiers Xi.j contiennent une serie de donnees en colonne. Par exemple, le fichier X01.01 continent sous forme de colonne
donnee1
donnee2
donnee3
...
-Je souhaiterais recuperer ces donnees et les stockers sous forme de ligne en face du l'indice i,j correspondant dans le premier fichier.
Donc dans le fichier cree, avoir :
01 01 donnee1 donnee2 donnee3 ....
01 02 donnee'1 donnee'2 donnee'3 ...
01 03 ... ... ...
...
Si quelqu'un a une idee de comment faire cela je lui serais extrement reconnaissant. Pour ma part, je continue de naviguer dans les tutoriaux mais je ne trouve toujours pas de reponses.
Merci d'avance!
Hors ligne
#2 Le 28/11/2012, à 23:46
- pires57
Re : script bash debutant
Avec une boucle pour parcourir i et une autre pour j
X <- ValeurMaxdeX
Y<--ValeurMaxdeY
pour i de 1 jusque X faire
{
pour j de 1 jusque Y faire
{
//instruction
}
}
Utilisateur d'Archlinux, Ubuntu et Kali Linux
Administrateur système et réseau spécialisé Linux.
LinkedIn
Hors ligne
#3 Le 28/11/2012, à 23:55
- kev0989
Re : script bash debutant
Merci pour ta reponse,
je me rends compte que je me suis mal exprime. En fait les valeurs de i et j sont plus ou moins aleatoires, ils ne sont pas incrementes de 1 a chaque fois. Par exemple. je peux avoir 15.42 (i=15,j=42) et ne pas avoir 15.41(i=15,j=41). C'est pourquoi j'ai besoin d'une commande qui me permette d'extraire les valeurs de i et j dans le NOM des fichiers. et de pouvoir les stocker une par une.
Une idee ?
Hors ligne
#4 Le 29/11/2012, à 00:09
- pires57
Re : script bash debutant
tu as la commande basename qui pourrais probablement te servir. a toi de développer autour.
Utilisateur d'Archlinux, Ubuntu et Kali Linux
Administrateur système et réseau spécialisé Linux.
LinkedIn
Hors ligne
#5 Le 29/11/2012, à 00:15
- kev0989
Re : script bash debutant
Je vais me renseigner la dessus. Merci!.
Aussi, je voudrais savoir, comment dans un script bash, se debrouiller pour creer un fichier texte et surtout le modifier. J'utilise emacs comme editeur de texte. J'imagine que dans le script on commence par lancer l'editeur mais ensuite ?.. Comment creer des tableaux de maniere automatique et les sauvegarder.
Merci
Hors ligne
#6 Le 29/11/2012, à 00:27
- pires57
Re : script bash debutant
> fichier
touch ... tu as plusieur méthode pour créer un fichier
Utilisateur d'Archlinux, Ubuntu et Kali Linux
Administrateur système et réseau spécialisé Linux.
LinkedIn
Hors ligne
#7 Le 29/11/2012, à 00:38
- xavier4811
Re : script bash debutant
usage :
./script.sh /chemin/absolu/du/dossier > /fichier/de/sortie
#!/bin/bash
if [ ! -d "$1" ]
then echo $1 " n'est pas un dossier"
exit 0
fi
list=$(ls $1)
for file in $list
do output=$(echo $file | sed -e 's/X/ /' -e 's/\./ /')
for line in $(cat "$1/$file")
do output=$output" "$(echo $line)
done
echo $output
done
Hors ligne
#8 Le 29/11/2012, à 01:33
- kev0989
Re : script bash debutant
Merci pour ta reponse, j'ai l'impression que c'est exactement ce que je recherche. Cependant, j'aimerais vraiment comprendre ton script.
pourrais-tu detailler cette ligne
do output=$(echo $file | sed -e 's/X/ /' -e 's/\./ /')
s'il te plait ?
Merci
Hors ligne
#9 Le 29/11/2012, à 01:39
- xavier4811
Re : script bash debutant
affectation a la variable output la valeur de la variable $file qui contient le nom du fichier dont les X et les points sont remplacés par un espace par sed
le do fait partie de la boucle for ; do ; done
Hors ligne
#10 Le 29/11/2012, à 01:51
- kev0989
Re : script bash debutant
Ok merci!
Maintenant ce que je voudrais faire, j'ai un fichier texte qui continient 2 colonnes. je voudrais prendre les valeurs de la deuxieme colonne et les re ecrire dans un fichier texte sous forme d'une ligne. Par exemple mon fichier en question est :
x1 y1
x2 y2
x3 y3
...
et je voudrais ecrire dans un autre fichier :
y1 y2 y3 y4 ...
en ligne comme cela. Sais-tu comment faire ?
Hors ligne
#11 Le 29/11/2012, à 02:07
- xavier4811
Re : script bash debutant
la $2 représente la 2eme colonne si le séparateur de colonnes est un espace
a adapter avec -F" ", le séparateur c'est le caractères entre les guillemets.
output=$(awk -F" " '{ print $2 }' < fichier.txt) && echo $output > autre_fichier
Hors ligne
#12 Le 29/11/2012, à 02:18
- kev0989
Re : script bash debutant
C'est presque ce que je veux. En fait ici, toutes les donnees de la colonne sont stockees dans une seule variable output. Je voudrais avoir un moyen d'indexer chaque valeur pour faire des opetations dessus.
Par exemple, je voudrais pouvoir prendre la premiere valeur output[1] de la colonne et faire une operation dessus avant de l'ecrire sur le fichier.
Il y a t'il moyen de stocker output sous la forme d'un tableau a une ligne ?
Hors ligne
#13 Le 29/11/2012, à 02:34
- xavier4811
Re : script bash debutant
declare -a tableau
tableau=($(awk -F" " '{ print $2 }' < fichier.txt)) && echo ${tableau[0]} ${tableau[2]}
après tu fait ce que tu veut de chaque élément ${tableau[x]} du tableau
Hors ligne
#14 Le 29/11/2012, à 02:43
- kev0989
Re : script bash debutant
Merci beaucoup c' est exactement ce qu eje voulais,
une question cependant que signifie le -a devant la declaration ?
Hors ligne
#15 Le 29/11/2012, à 02:46
- xavier4811
Re : script bash debutant
array
Hors ligne
#16 Le 29/11/2012, à 03:05
- Watael
Re : script bash debutant
salut,
UUoL (useless use of ls)
UUoC (useless use of cat)
je génère des fichiers bidons
genFileN () { printf '%02d\n' $((RANDOM%99+1));}
for ((x=0;x<10;x++)); do echo "donnee1
donnee2
donnee3" >Motif$(genFileN ).$(genFileN);done
et je traite les fichiers avec bash
for f in Motif*
do
echo "$f" #pour voir quel fichier est traité
mapfile -t d < "$f"
fp=${f/./ }
echo "${fp/#Motif} ${d[@]}"
echo
done
Motif08.22
08 22 donnee1 donnee2 donnee3
Motif13.91
13 91 donnee1 donnee2 donnee3
Motif16.38
16 38 donnee1 donnee2 donnee3
Motif44.42
44 42 donnee1 donnee2 donnee3
Motif46.45
46 45 donnee1 donnee2 donnee3
Motif54.13
54 13 donnee1 donnee2 donnee3
Motif67.25
67 25 donnee1 donnee2 donnee3
Motif79.80
79 80 donnee1 donnee2 donnee3
Motif96.33
96 33 donnee1 donnee2 donnee3
Motif96.34
96 34 donnee1 donnee2 donnee3
Dernière modification par Watael (Le 29/11/2012, à 07:00)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#17 Le 29/11/2012, à 05:39
- nesthib
Re : script bash debutant
@Watael : à quoi correspond ton « genFileN » ?
@xavier4811 : inutile de déclarer le tableau :
tableau=($(awk '{ printf $2" " }' fichier))
@kev0989 : ta première question, en full awk
awk '{if (f!=FILENAME){match(FILENAME, /([0-9]+).([0-9]+)/, a) ; printf sep a[1]" "a[2]} {printf " "$0}; sep="\n" ; f=FILENAME}' X*
GUL Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne
#18 Le 29/11/2012, à 06:55
- Watael
Re : script bash debutant
ah, oui. J'avais oublié de mettre la définition de cette fonction.
c'est corrigé.
merci
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#19 Le 29/11/2012, à 07:22
- kev0989
Re : script bash debutant
Merci a tous pour vos reponses.
Grace a vous j'ai reussi a faire ce que je voulais.
Je suis nouveau sur ce forum et je ne sais pas si on peut classer un sujet comme resolu ( en tout cas je n' ai pas trouver comment faire) mais c'est le cas.
Hors ligne
#20 Le 29/11/2012, à 15:43
- nesthib
Re : script bash debutant
modifie ton premier message et ajoute [résolu] au début du titre
GUL Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne
Pages : 1