Débutante en script shell

[Fermé]
Signaler
Messages postés
3
Date d'inscription
mardi 27 mai 2014
Statut
Membre
Dernière intervention
27 mai 2014
-
Messages postés
3
Date d'inscription
mardi 27 mai 2014
Statut
Membre
Dernière intervention
27 mai 2014
-
Bonjour à tous,
Je suis débutante sous Linux et je vais bientôt passer un concours en informatique.
Je travaille actuellement sur des annales et je manque de temps pour approfondir la programmation bash :

Je dois écrire un script shell qui prend en paramètre un répertoire, puis liste les fichiers en
*.csv ensuite il doit échanger les colonnes 1 et 2 de chacun de ces fichiers et écrire le résultat dans un fichier *.new

j'ai commencé par ça
#!\bin\bash

if [-z $1] then
echo "le répertoire n'existe pas"
fi cd $1 ls _l *.csv

ensuite je dois utiliser awk mais je ne comprends pas très bien.

Merci de votre aide !


4 réponses

Messages postés
1640
Date d'inscription
dimanche 21 octobre 2012
Statut
Membre
Dernière intervention
10 décembre 2016
497
Bonjour, tu devrais essayer avec les commandes de type "for each" qui te permettront de lancer un traitement particulier sur chaque fichier d'un répertoire.

Ca ressemblerait à

for fichier in $1/*.csv ; 
do
traitement "$fichier" ;
done

Maintenant faut se concentrer sur le traitement. Je n'ai jamais essayé awk ou autres mais j'y regarderais dès que possible, ça doit pas être sorcier.

Là je suis pas sur ma machine linux je ne peux tester en live mais je te dirais quoi au besoin car je me rappelle d'un exercice plutôt similaire durant les cours.
Messages postés
3
Date d'inscription
mardi 27 mai 2014
Statut
Membre
Dernière intervention
27 mai 2014

Merci à toi, c'est gentil !

j'ai trouvé ceçi sur awk :

cat $i | awk '{print $2 $1}' > $i .new
Messages postés
3
Date d'inscription
mardi 27 mai 2014
Statut
Membre
Dernière intervention
27 mai 2014

Merci à vous.
J'ai testé vos scripts et cela fonctionne.
Encore merci pour votre aide.
Messages postés
1640
Date d'inscription
dimanche 21 octobre 2012
Statut
Membre
Dernière intervention
10 décembre 2016
497
Ok, voilà j'ai testé, ce script fonctionne chez moi

#!/bin/bash
if ! [ -d $1 ]; then
	echo "Le répertoire $1 n'existe pas."
	exit 1
fi

echo "Traitement du répertoire $1"

cd $1
liste='ls *.csv'

for fichier in $liste; do
	echo "Traitement du fichier \"$fichier\""
	awk -F "," '{print $2, ",", $1}' $fichier >$fichier.new
done


Donc je crée un répertoire test qui contient
a.csv
b.csv

Dans ces fichiers csv, il y a :

"a","b","c"
"d","e","f"


En appelant :

./script.sh test

J'obtiens dans le répertoire test :
a.csv.new
b.csv.new

Dans lesquels j'ai bien la deuxième et la première colonne.
Utilisateur anonyme
salut,

#!/bin/bash

test -d "$1" || {
echo "Le répertoire $1 n'existe pas."
exit 1
}
echo "Traitement du répertoire $1"
awk -F "," 'FNR==1{print "traitement du fichier : "FILENAME}{print $2, ",", $1 >FILENAME".new"}' $1/*.csv