Script shell
Résolu/Fermé
remousse
Messages postés
299
Date d'inscription
dimanche 2 novembre 2008
Statut
Membre
Dernière intervention
20 novembre 2014
-
5 sept. 2011 à 15:31
remousse Messages postés 299 Date d'inscription dimanche 2 novembre 2008 Statut Membre Dernière intervention 20 novembre 2014 - 6 sept. 2011 à 16:36
remousse Messages postés 299 Date d'inscription dimanche 2 novembre 2008 Statut Membre Dernière intervention 20 novembre 2014 - 6 sept. 2011 à 16:36
A voir également:
- Script shell
- Script vidéo youtube - Guide
- Classic shell windows 11 - Télécharger - Personnalisation
- Ghost script - Télécharger - Polices de caractères
- Microsoft activation script - Accueil - Windows
- Script bat - Guide
6 réponses
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 419
5 sept. 2011 à 15:58
5 sept. 2011 à 15:58
Salut,
L'archive "liens.zip" contient un fichier nommé "liens.txt"
L'archive "toto.zip" ne contient pas de fichier nommé "toto.txt"
L'archive "liens.zip" contient un fichier nommé "liens.txt"
L'archive "toto.zip" ne contient pas de fichier nommé "toto.txt"
$ ls -1 *.zip liens.zip toto.zip $ cat foo.sh #! /bin/bash for file in *.zip do (unzip -l ${file} | grep -q ${file%.*}.txt) && \ echo "${file%.*} : Même nom." ||\ echo "${file%.*} : Nom différent" done $ ./foo.sh liens : Même nom. toto : Nom différent $
remousse
Messages postés
299
Date d'inscription
dimanche 2 novembre 2008
Statut
Membre
Dernière intervention
20 novembre 2014
6
6 sept. 2011 à 11:29
6 sept. 2011 à 11:29
Parfait j'ai pu résoudre mon problème. Merci à toi.
Désormais je me pose la question suivante.
J'aimerai récupérer la valeur des cellules de la ligne 1 et des 4 premières colonnes de mon csv.
J'arrive à afficher le contenu de mon fichier par:
Mais j'aimerai en gros pouvoir faire cela:
BASE="A1"
COL="A2"...
Avez-vous idée sur ce sujet.
Par avance merci.
Désormais je me pose la question suivante.
J'aimerai récupérer la valeur des cellules de la ligne 1 et des 4 premières colonnes de mon csv.
J'arrive à afficher le contenu de mon fichier par:
while read line do echo -e "$line\n" done < $(basename $file .${file##*.}).csv
Mais j'aimerai en gros pouvoir faire cela:
BASE="A1"
COL="A2"...
Avez-vous idée sur ce sujet.
Par avance merci.
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 419
6 sept. 2011 à 11:51
6 sept. 2011 à 11:51
$ cat plop.csv L1C1;L1C2;L1C3;L1C4;L1C5;L1C6;L1C7 L2C1;L2C2;L2C3;L2C4;L2C5;L2C6;L2C7 L3C1;L3C2;L3C3;L3C4;L3C5;L3C6;L3C7 $ IFS=';' ; read BASE COL NUM NAME RESTE < <(head -1 plop.csv); unset IFS $ echo $BASE L1C1 $ echo $COL L1C2 $ echo $NUM L1C3 $ echo $NAME L1C4 $ echo $RESTE L1C5;L1C6;L1C7 $
Tu peux aussi faire via un tableau :
$ IFS=';' ; read -a TABL < <(head -1 plop.csv); unset IFS $ echo ${TABL[0]} L1C1 $ echo ${TABL[2]} L1C3 $ echo ${TABL[3]} L1C4 $
remousse
Messages postés
299
Date d'inscription
dimanche 2 novembre 2008
Statut
Membre
Dernière intervention
20 novembre 2014
6
6 sept. 2011 à 12:06
6 sept. 2011 à 12:06
Je viens d'essayer ta méthode, pour mon cas la ligne est la suivante:
Je me retrouve face à une erreur que voici:
Je ne vois pas d'où cela peut-il provenir.
Merci de ton aide zipe31
IFS=';' ; read BASE COLLEC CLASSE META < <(head -1 $(basename $file .${file##*.}).csv); unset IFS
Je me retrouve face à une erreur que voici:
$ ./test.sh Starting Docubase ./test.sh: line 56: syntax error near unexpected token '<' ./test.sh: line 56: ' IFS=';' ; read BASE COLLEC CLASSE META < <(head -1 $(basename $file .${file##*.}).csv); unset IFS'
Je ne vois pas d'où cela peut-il provenir.
Merci de ton aide zipe31
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 419
6 sept. 2011 à 12:11
6 sept. 2011 à 12:11
Quel système ?
Quel shell ?
Quel shell ?
remousse
Messages postés
299
Date d'inscription
dimanche 2 novembre 2008
Statut
Membre
Dernière intervention
20 novembre 2014
6
6 sept. 2011 à 12:13
6 sept. 2011 à 12:13
Sur la machine où je dois développer cela je n'ai que Cygwin à ma disposition du coup je penses que cela vient de là je suis en train de mettre Ubuntu en Live USB.
Pour le shell, je penses que tu dois parler de cela: #! /bin/sh !!! (je ne suis pas expert en shell mais n'est pas le choix de faire ce travail dans ce langage...)
merci à toi
Pour le shell, je penses que tu dois parler de cela: #! /bin/sh !!! (je ne suis pas expert en shell mais n'est pas le choix de faire ce travail dans ce langage...)
merci à toi
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 419
6 sept. 2011 à 12:16
6 sept. 2011 à 12:16
Essaie comme ça alors :
IFS=';' var=$(head -1 $(basename $file .${file##*.}.csv)) read BASE COLLEC CLASSE META <<<${var} unset IFS
remousse
Messages postés
299
Date d'inscription
dimanche 2 novembre 2008
Statut
Membre
Dernière intervention
20 novembre 2014
6
6 sept. 2011 à 13:58
6 sept. 2011 à 13:58
je n'ai plus l'erreur, par contre l'affichage avec echo $BASE me renvoie ceci:
PK?0n!??D????testcsv.csv]??n?0????MB?%?*?a?dh??d??$?a????S??-? ??O}"?_?oC?u????)
?y???d?????>??Rh????~??0?????v'?????????????????^?????|?uw??{aun??n?9???w??O?O?o
o?7???G??g?>l7???????*?R+0?@P?@??AKV????e??
Aurais-tu une explication là dessus ?
PK?0n!??D????testcsv.csv]??n?0????MB?%?*?a?dh??d??$?a????S??-? ??O}"?_?oC?u????)
?y???d?????>??Rh????~??0?????v'?????????????????^?????|?uw??{aun??n?9???w??O?O?o
o?7???G??g?>l7???????*?R+0?@P?@??AKV????e??
Aurais-tu une explication là dessus ?
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 419
6 sept. 2011 à 14:03
6 sept. 2011 à 14:03
Est-ce que "basename $file .${file##*.}.csv" renvoie bien le nom de ton ".csv" ?
Est-ce que "head -1 $(basename $file .${file##*.}.csv)" renvoie bien la 1ère ligne de ton fichier ?
Si oui, est-elle bien formatée ?
Le séparateur de ton ".csv" est bien le point virgule (;) ?
Est-ce que "head -1 $(basename $file .${file##*.}.csv)" renvoie bien la 1ère ligne de ton fichier ?
Si oui, est-elle bien formatée ?
Le séparateur de ton ".csv" est bien le point virgule (;) ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 419
6 sept. 2011 à 16:03
6 sept. 2011 à 16:03
Tiens essaie comme ça :
$ cat foo.sh #! /bin/bash #set -xv TARGET=target FILE=zip/*.zip for file in ${FILE} do (unzip -l ${file} | grep -q $(basename ${file%.*}.csv)) && \ ( echo "${file%.*} : Même nom." unzip -qq ${file} $(basename ${file%.*}.csv) -d ${TARGET}/ var=$(head -1 ${TARGET}/$(basename ${file%.*}.csv)) read BASE COLLEC CLASSE META RESTE <<<${var//;/ } echo "BASE = ${BASE}" echo "COLLEC = ${COLLEC}" echo "CLASSE = ${CLASSE}" echo "META = ${META}" echo "RESTE = $RESTE" )\ ||\ echo "${file%.*} : Nom différent" done $ ./foo.sh zip/plop : Même nom. BASE = L1C1 COLLEC = L1C2 CLASSE = L1C3 META = L1C4 RESTE = L1C5 L1C6 L1C7 zip/toto : Nom différent $
remousse
Messages postés
299
Date d'inscription
dimanche 2 novembre 2008
Statut
Membre
Dernière intervention
20 novembre 2014
6
6 sept. 2011 à 16:36
6 sept. 2011 à 16:36
Parfait ton exemple fonctionne parfaitement.
Je te remercie pour ton aide et ta patience.
Ciao
Je te remercie pour ton aide et ta patience.
Ciao