Script bash - Récupérer des colonnes
Résolu/Fermé
enzatto
Messages postés
16
Date d'inscription
mardi 10 avril 2007
Statut
Membre
Dernière intervention
12 avril 2007
-
10 avril 2007 à 16:49
benit_lbn Messages postés 1 Date d'inscription mardi 21 septembre 2010 Statut Membre Dernière intervention 21 septembre 2010 - 21 sept. 2010 à 22:31
benit_lbn Messages postés 1 Date d'inscription mardi 21 septembre 2010 Statut Membre Dernière intervention 21 septembre 2010 - 21 sept. 2010 à 22:31
A voir également:
- Script bash - Récupérer des colonnes
- Script vidéo youtube - Guide
- Recuperer video youtube - Guide
- Recuperer message whatsapp supprimé - Guide
- Comment récupérer un compte facebook piraté - Guide
- Comment faire des colonnes sur word - Guide
13 réponses
gorkimat
Messages postés
70
Date d'inscription
dimanche 1 avril 2007
Statut
Membre
Dernière intervention
1 mars 2012
9
10 avril 2007 à 18:01
10 avril 2007 à 18:01
Bonjour,
Il y a peut-être plus condensé, mais c'est déjà un début et a adapter.
#!/bin/bash
monfich=MonFic.txt
var_monfich='$monfich'
cat < MonFic.txt | while true
do
read ligne
if [ "$ligne" = "" ]; then break; fi
if [ `echo ${ligne} | awk '{print $4}'` -eq 08 ];
then
heure=`echo ${ligne} | awk '{print $1}' | cut -d: -f1`
minute=`echo ${ligne} | awk '{print $1}' | cut -d: -f2`
seconde=`echo ${ligne} | awk '{print $1}' | cut -d: -f3`
mseconde=`echo ${ligne} | awk '{print $1}' | cut -d: -f4`
# Miliseconde à ajouter
somme=$(($heure*3600+$minute*60+$seconde))
echo "$somme `echo ${ligne} | awk '{print $2 " " $3 " "$4}'`" >> ${monfich}.out
fi
done
Bon courage
Il y a peut-être plus condensé, mais c'est déjà un début et a adapter.
#!/bin/bash
monfich=MonFic.txt
var_monfich='$monfich'
cat < MonFic.txt | while true
do
read ligne
if [ "$ligne" = "" ]; then break; fi
if [ `echo ${ligne} | awk '{print $4}'` -eq 08 ];
then
heure=`echo ${ligne} | awk '{print $1}' | cut -d: -f1`
minute=`echo ${ligne} | awk '{print $1}' | cut -d: -f2`
seconde=`echo ${ligne} | awk '{print $1}' | cut -d: -f3`
mseconde=`echo ${ligne} | awk '{print $1}' | cut -d: -f4`
# Miliseconde à ajouter
somme=$(($heure*3600+$minute*60+$seconde))
echo "$somme `echo ${ligne} | awk '{print $2 " " $3 " "$4}'`" >> ${monfich}.out
fi
done
Bon courage
enzatto
Messages postés
16
Date d'inscription
mardi 10 avril 2007
Statut
Membre
Dernière intervention
12 avril 2007
11 avril 2007 à 10:01
11 avril 2007 à 10:01
Bonjour!
super merci à gorkimat! t dla balle!
g encore un problème cependant: j'utilise Cygwin /s Win XP et ce dernier ne comprend pas les do, done et les if, fi alors que les syntaxes sont correctes... il me sort syntax error near unexpected token 'done' et même chose pour 'fi' si je supprime le do/done.
un mec a déjà eu ce problème apparemment et il a contacté Cygwin sans réponse en matière j'en ai peur...
voir http://ecos.sourceware.org/ml/cygwin/2001-09/msg00236.html
voila! si jamais vous avez une idée en tête...
MERCI ENCORE!
super merci à gorkimat! t dla balle!
g encore un problème cependant: j'utilise Cygwin /s Win XP et ce dernier ne comprend pas les do, done et les if, fi alors que les syntaxes sont correctes... il me sort syntax error near unexpected token 'done' et même chose pour 'fi' si je supprime le do/done.
un mec a déjà eu ce problème apparemment et il a contacté Cygwin sans réponse en matière j'en ai peur...
voir http://ecos.sourceware.org/ml/cygwin/2001-09/msg00236.html
voila! si jamais vous avez une idée en tête...
MERCI ENCORE!
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
11 avril 2007 à 13:27
11 avril 2007 à 13:27
Salut,
Essaie avec le même script, mais un peu remanié :
;-))
Essaie avec le même script, mais un peu remanié :
#!/bin/bash monfich=plop.txt sed -n '/08$/p' $monfich | while true do read ligne if [ "$ligne" = "" ] then break fi col=$(echo ${ligne} | awk '{ print $2 " " $3 " "$4 }') heure=$(echo ${ligne} | awk -F: '{ print $1 }') minute=$(echo ${ligne} | awk -F: '{ print $2 }') seconde=$(echo ${ligne} | awk -F: '{ print $3 }') mseconde=$(echo ${ligne} | awk -F: '{ print $4 }' | awk '{ print $1 }') somme="$(($heure*3600+$minute*60+$seconde)),$mseconde" echo "$somme $col" >> ${monfich}.out doneN'oublie pas d'ajuster la variable "monfich" avec le nom de ton fichier...
;-))
enzatto
Messages postés
16
Date d'inscription
mardi 10 avril 2007
Statut
Membre
Dernière intervention
12 avril 2007
>
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
11 avril 2007 à 13:44
11 avril 2007 à 13:44
Salut!
Je suis super impressionné par la rapidité de tes réponses: MERCI!
Ton script a l'air nickel en plus.
Ce qui se passe maintenant c'est que Cygwin ne reconnait pas les boucles do et if je comprends pas pkoi...
le fichier trait2 se présente donc comme tu l'as fait:
#!/bin/bash
monfich=/home/catto/test.txt
sed -n '/08$/p' $monfich | while true
do
read ligne
if [ "$ligne" = "" ]
then break
fi
col=$(echo ${ligne} | awk '{ print $2 " " $3 " "$4 }')
heure=$(echo ${ligne} | awk -F: '{ print $1 }')
minute=$(echo ${ligne} | awk -F: '{ print $2 }')
seconde=$(echo ${ligne} | awk -F: '{ print $3 }')
mseconde=$(echo ${ligne} | awk -F: '{ print $4 }' | awk '{ print $1 }')
somme="$(($heure*3600+$minute*60+$seconde)),$mseconde"
echo "$somme $col" >> ${monfich}.out
done
je le lance dans Cygwin par ./trait2 normal
et il me dit:
./trait2: line 16: syntax error near unexpected token 'done'
./trait2: line 16: 'done'
si j'enlève le do et le done il fait pareil mais avec "fi"
Merci une fois encore pour ton aide. Si jamais t'as une idée là-dessus...
Je suis super impressionné par la rapidité de tes réponses: MERCI!
Ton script a l'air nickel en plus.
Ce qui se passe maintenant c'est que Cygwin ne reconnait pas les boucles do et if je comprends pas pkoi...
le fichier trait2 se présente donc comme tu l'as fait:
#!/bin/bash
monfich=/home/catto/test.txt
sed -n '/08$/p' $monfich | while true
do
read ligne
if [ "$ligne" = "" ]
then break
fi
col=$(echo ${ligne} | awk '{ print $2 " " $3 " "$4 }')
heure=$(echo ${ligne} | awk -F: '{ print $1 }')
minute=$(echo ${ligne} | awk -F: '{ print $2 }')
seconde=$(echo ${ligne} | awk -F: '{ print $3 }')
mseconde=$(echo ${ligne} | awk -F: '{ print $4 }' | awk '{ print $1 }')
somme="$(($heure*3600+$minute*60+$seconde)),$mseconde"
echo "$somme $col" >> ${monfich}.out
done
je le lance dans Cygwin par ./trait2 normal
et il me dit:
./trait2: line 16: syntax error near unexpected token 'done'
./trait2: line 16: 'done'
si j'enlève le do et le done il fait pareil mais avec "fi"
Merci une fois encore pour ton aide. Si jamais t'as une idée là-dessus...
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
11 avril 2007 à 14:09
11 avril 2007 à 14:09
Re-
Essaie depuis la ligne de commande et depuis le répertoire où se trouve ton fichier "test.txt", de taper çà :
Essaie depuis la ligne de commande et depuis le répertoire où se trouve ton fichier "test.txt", de taper çà :
while read line; do echo "$line" ; done < <(grep "08$" test.txt)et dis moi ce que ça répond ;-))
enzatto
Messages postés
16
Date d'inscription
mardi 10 avril 2007
Statut
Membre
Dernière intervention
12 avril 2007
11 avril 2007 à 14:24
11 avril 2007 à 14:24
salut!
aucun message d'erreur affiché. ça a l'air de marcher
c bon signe?
aucun message d'erreur affiché. ça a l'air de marcher
c bon signe?
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
11 avril 2007 à 14:27
11 avril 2007 à 14:27
As-tu eu ça :
12:56:51:500 25/09/2006 0062,2 08 12:56:51:500 25/09/2006 0062,2 08comme résultat ?
enzatto
Messages postés
16
Date d'inscription
mardi 10 avril 2007
Statut
Membre
Dernière intervention
12 avril 2007
>
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
11 avril 2007 à 14:29
11 avril 2007 à 14:29
non aucun retour écran
le calcul tourne
et j'ai de nouveau la main sous cygwin avec le $
le calcul tourne
et j'ai de nouveau la main sous cygwin avec le $
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
11 avril 2007 à 14:41
11 avril 2007 à 14:41
Essaie ça alors :
#!/bin/bash monfich="/home/catto/test.txt" sed -n '/08$/p' $monfich > tmp.txt while read ligne do #read ligne if [ "$ligne" = "" ] then break fi col=$(echo ${ligne} | awk '{ print $2 " " $3 " "$4 }') heure=$(echo ${ligne} | awk -F: '{ print $1 }') minute=$(echo ${ligne} | awk -F: '{ print $2 }') seconde=$(echo ${ligne} | awk -F: '{ print $3 }') mseconde=$(echo ${ligne} | awk -F: '{ print $4 }' | awk '{ print $1 }') somme="$(($heure*3600+$minute*60+$seconde)),$mseconde" echo "$somme $col" >> ${monfich}.out done < tmp.txt rm -f tmp.txt
enzatto
Messages postés
16
Date d'inscription
mardi 10 avril 2007
Statut
Membre
Dernière intervention
12 avril 2007
11 avril 2007 à 14:47
11 avril 2007 à 14:47
T es vraiment hallucinant! wao
la g des erreurs (je suis dans le répertoire de test.txt)
$ ./trait2
: No such file or directory
./trait2: line 17: syntax error near unexpected token 'done'
'./trait2: line 17: 'done < tmp.txt
tu penses que ça vient d'où?
la g des erreurs (je suis dans le répertoire de test.txt)
$ ./trait2
: No such file or directory
./trait2: line 17: syntax error near unexpected token 'done'
'./trait2: line 17: 'done < tmp.txt
tu penses que ça vient d'où?
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
11 avril 2007 à 14:53
11 avril 2007 à 14:53
Lance ton script en mode débogage, et copie/colle le résultat ici s'il te plait :
sh -xv trait2
enzatto
Messages postés
16
Date d'inscription
mardi 10 avril 2007
Statut
Membre
Dernière intervention
12 avril 2007
11 avril 2007 à 15:00
11 avril 2007 à 15:00
$ sh -xv trait2
#!/bin/bash
monfich="/home/catto/test.txt"
+ monfich=$'/home/catto/test.txt\r'
sed -n '/08$/p' $monfich > tmp.txt
+ sed -n '/08$/p' $'monfich > tmp.txt\r'
: No such file or directory
while read ligne
do
#read ligne
if [ "$ligne" = "" ]
then break
fi
col=$(echo ${ligne} | awk '{ print $2 " " $3 " "$4 }')
heure=$(echo ${ligne} | awk -F: '{ print $1 }')
minute=$(echo ${ligne} | awk -F: '{ print $2 }')
seconde=$(echo ${ligne} | awk -F: '{ print $3 }')
mseconde=$(echo ${ligne} | awk -F: '{ print $4 }' | awk '{ print $1 }')
somme="$(($heure*3600+$minute*60+$seconde)),$mseconde"
echo "$somme $col" >> ${monfich}.out
done < tmp.txt
rm -f tmp.txt
trait2: line 17: syntax error near unexpected token 'done'
'rait2: line 17: 'done < tmp.txt
C koi la technique pour copier coller???
#!/bin/bash
monfich="/home/catto/test.txt"
+ monfich=$'/home/catto/test.txt\r'
sed -n '/08$/p' $monfich > tmp.txt
+ sed -n '/08$/p' $'monfich > tmp.txt\r'
: No such file or directory
while read ligne
do
#read ligne
if [ "$ligne" = "" ]
then break
fi
col=$(echo ${ligne} | awk '{ print $2 " " $3 " "$4 }')
heure=$(echo ${ligne} | awk -F: '{ print $1 }')
minute=$(echo ${ligne} | awk -F: '{ print $2 }')
seconde=$(echo ${ligne} | awk -F: '{ print $3 }')
mseconde=$(echo ${ligne} | awk -F: '{ print $4 }' | awk '{ print $1 }')
somme="$(($heure*3600+$minute*60+$seconde)),$mseconde"
echo "$somme $col" >> ${monfich}.out
done < tmp.txt
rm -f tmp.txt
trait2: line 17: syntax error near unexpected token 'done'
'rait2: line 17: 'done < tmp.txt
C koi la technique pour copier coller???
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
11 avril 2007 à 15:10
11 avril 2007 à 15:10
y'a un truc qui me chiffonne, c'est l'interprétation de la variable "$monfich" :
Essaie de virer la variable dans ton script et met directement le chemin et le nom du fichier en lieu et place, et relance le script en mode débogage.
monfich="/home/catto/test.txt" + monfich=$'/home/catto/test.txt\r'Dans son interprétation il met un "$" devant alors qu'il ne devrait pas !!!
Essaie de virer la variable dans ton script et met directement le chemin et le nom du fichier en lieu et place, et relance le script en mode débogage.
enzatto
Messages postés
16
Date d'inscription
mardi 10 avril 2007
Statut
Membre
Dernière intervention
12 avril 2007
11 avril 2007 à 15:18
11 avril 2007 à 15:18
ça donne ça. ça vient de ma version cygwin?
$ sh -xv trait2
#!/bin/bash
sed -n '/08$/p' test.txt > tmp.txt
+ sed -n '/08$/p' test.txt
: No such file or directory
while read ligne
do
#read ligne
if [ "$ligne" = "" ]
then break
fi
col=$(echo ${ligne} | awk '{ print $2 " " $3 " "$4 }')
heure=$(echo ${ligne} | awk -F: '{ print $1 }')
minute=$(echo ${ligne} | awk -F: '{ print $2 }')
seconde=$(echo ${ligne} | awk -F: '{ print $3 }')
mseconde=$(echo ${ligne} | awk -F: '{ print $4 }' | awk '{ print $1 }')
somme="$(($heure*3600+$minute*60+$seconde)),$mseconde"
echo "$somme $col" >> test.txt.out
done < tmp.txt
trait2: line 16: syntax error near unexpected token 'done'
'rait2: line 16: 'done < tmp.txt
$ sh -xv trait2
#!/bin/bash
sed -n '/08$/p' test.txt > tmp.txt
+ sed -n '/08$/p' test.txt
: No such file or directory
while read ligne
do
#read ligne
if [ "$ligne" = "" ]
then break
fi
col=$(echo ${ligne} | awk '{ print $2 " " $3 " "$4 }')
heure=$(echo ${ligne} | awk -F: '{ print $1 }')
minute=$(echo ${ligne} | awk -F: '{ print $2 }')
seconde=$(echo ${ligne} | awk -F: '{ print $3 }')
mseconde=$(echo ${ligne} | awk -F: '{ print $4 }' | awk '{ print $1 }')
somme="$(($heure*3600+$minute*60+$seconde)),$mseconde"
echo "$somme $col" >> test.txt.out
done < tmp.txt
trait2: line 16: syntax error near unexpected token 'done'
'rait2: line 16: 'done < tmp.txt
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
11 avril 2007 à 15:28
11 avril 2007 à 15:28
Malheureusement je n'ai pas Cygwin sous la main.
Faudrait attendre que quelqu'un ayant une version d'installée et opérationnelle (comme lami20j) passe dans le coin et essaie ça chez lui pour savoir si effectivement ça vient de ta version ou d'ailleurs...
;-))
Faudrait attendre que quelqu'un ayant une version d'installée et opérationnelle (comme lami20j) passe dans le coin et essaie ça chez lui pour savoir si effectivement ça vient de ta version ou d'ailleurs...
;-))
enzatto
Messages postés
16
Date d'inscription
mardi 10 avril 2007
Statut
Membre
Dernière intervention
12 avril 2007
11 avril 2007 à 15:31
11 avril 2007 à 15:31
franchement t as déjà grave assuré!
merci vraiment.
si jamais tu peux essayer sous cygwin et me dire à l'occas
je vais cloturer ce pb comme résolu et en creer un nouveau plus spécifique
merci encore pour ton aide et ta rapidité!!!!
merci vraiment.
si jamais tu peux essayer sous cygwin et me dire à l'occas
je vais cloturer ce pb comme résolu et en creer un nouveau plus spécifique
merci encore pour ton aide et ta rapidité!!!!
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
11 avril 2007 à 15:31
11 avril 2007 à 15:31
Salut à vous,
pas de problèmes pour moi
mais il faut d'abord que j'arrive à la maison :-))
je suis au boulot
à ce soir vers 19h00
pas de problèmes pour moi
mais il faut d'abord que j'arrive à la maison :-))
je suis au boulot
à ce soir vers 19h00
enzatto
Messages postés
16
Date d'inscription
mardi 10 avril 2007
Statut
Membre
Dernière intervention
12 avril 2007
11 avril 2007 à 15:34
11 avril 2007 à 15:34
salut!
ok ça marche
merci vous êtes super efficaces les gars!
ok ça marche
merci vous êtes super efficaces les gars!
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
11 avril 2007 à 15:33
11 avril 2007 à 15:33
pour mon amusement je vais voir si je sors une version Perl plus légère ;-)
enzatto
Messages postés
16
Date d'inscription
mardi 10 avril 2007
Statut
Membre
Dernière intervention
12 avril 2007
11 avril 2007 à 15:36
11 avril 2007 à 15:36
je connais pas perl
mais si ça permet de traiter des fichiers du type
12:56:15:000 25/07/2006 0059,7 09
12:56:51:500 25/09/2006 0062,2 08
12:56:52:000 25/07/2006 0057,7 09
12:56:52:500 25/08/2006 0071,9 09
12:56:08:000 25/07/2006 0065,3 15
12:56:15:000 25/07/2006 0057,7 09
12:56:51:500 25/09/2006 0062,2 08
12:56:52:000 08/07/2006 0059,7 09
12:56:52:500 25/08/2006 0071,9 09
12:56:08:000 08/07/2006 0065,7 15
12:56:15:000 25/07/2006 0059,6 09
12:56:51:500 26/09/2006 0062,2 08
12:56:52:000 26/07/2006 0052,7 09
08:56:52:500 26/08/2006 0061,3 09
08:56:08:000 26/07/2006 0045,3 15
en très grand nombre et dans les 200000 lignes ça m'intéresse :)
mais si ça permet de traiter des fichiers du type
12:56:15:000 25/07/2006 0059,7 09
12:56:51:500 25/09/2006 0062,2 08
12:56:52:000 25/07/2006 0057,7 09
12:56:52:500 25/08/2006 0071,9 09
12:56:08:000 25/07/2006 0065,3 15
12:56:15:000 25/07/2006 0057,7 09
12:56:51:500 25/09/2006 0062,2 08
12:56:52:000 08/07/2006 0059,7 09
12:56:52:500 25/08/2006 0071,9 09
12:56:08:000 08/07/2006 0065,7 15
12:56:15:000 25/07/2006 0059,6 09
12:56:51:500 26/09/2006 0062,2 08
12:56:52:000 26/07/2006 0052,7 09
08:56:52:500 26/08/2006 0061,3 09
08:56:08:000 26/07/2006 0045,3 15
en très grand nombre et dans les 200000 lignes ça m'intéresse :)
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
11 avril 2007 à 15:38
11 avril 2007 à 15:38
200000 c'est un jeu d'enfant :-DD
et oui c'est possible, je vais voir ça
et oui c'est possible, je vais voir ça
enzatto
Messages postés
16
Date d'inscription
mardi 10 avril 2007
Statut
Membre
Dernière intervention
12 avril 2007
11 avril 2007 à 15:42
11 avril 2007 à 15:42
ok dla balle alors
l'idée ce serait de donner une ligne de commande suivie du nom du fichier .txt à traiter et le tout renvoyant un fichier du même nom_trai.txt
en gros
merci les gars!!!!! :)
l'idée ce serait de donner une ligne de commande suivie du nom du fichier .txt à traiter et le tout renvoyant un fichier du même nom_trai.txt
en gros
merci les gars!!!!! :)
benit_lbn
Messages postés
1
Date d'inscription
mardi 21 septembre 2010
Statut
Membre
Dernière intervention
21 septembre 2010
Modifié par benit_lbn le 10/10/2010 à 20:04
Modifié par benit_lbn le 10/10/2010 à 20:04
j'arrive un peu tard mais ça peut peut-être aider quelqu'un
awk '$4==08 {split($1,tabl,":")
print tabl[1]*3600+tabl[2]*60+tabl[3]+tabl[4]/1000 ,$2 , $3, $4}' donnee_lieu.txt > resultat.txt
parce que franchement les scripts plus haut c'est ce compliquer la vie
awk '$4==08 {split($1,tabl,":")
print tabl[1]*3600+tabl[2]*60+tabl[3]+tabl[4]/1000 ,$2 , $3, $4}' donnee_lieu.txt > resultat.txt
parce que franchement les scripts plus haut c'est ce compliquer la vie
11 avril 2007 à 12:10
11 avril 2007 à 13:08
http://www.ac-creteil.fr/reseaux/systemes/linux/shell-scripts/filtres.html
http://www.ac-creteil.fr/reseaux/systemes/linux/shell-scripts/shell-programmation.html
http://perso.orange.fr/dorian.linux/bash.html
https://www.linux-pour-lesnuls.com/#introduction