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/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 : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde 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 wink


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne