Cygwin - traitement colonnes suite ...et fin?

Résolu/Fermé
enzatto Messages postés 16 Date d'inscription mardi 10 avril 2007 Statut Membre Dernière intervention 12 avril 2007 - 11 avril 2007 à 16:11
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 12 avril 2007 à 20:52
Bonjour à tous!

Je suis sous win xp et j'utilise la dernière version de Cygwin (dll 1.5.24-2).
J'ai un grand nombre de fichiers à traiter de 200.000 lignes du style:

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
donc dans l'ordre heure / date / valeur / type

On est arrivé avec jipicy et lami20j au script nommé trait2 du style

#!/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


qui me renvoie
: No such file or directory
./trait2: line 17: syntax error near unexpected token 'done'
'/trait2: line 17: 'done < tmp.txt

Le but de ce programme est de renvoyer un fichier monfich_trait.txt
du style
temps (en secondes) / date / valeur
en ne gardant que les ligne de type 08 (dernière colonne)


pour information, en mode débogage on obtient:

$ 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


Voilà! Avis aux amateurs!
j'aurais bien besoin d'un coup de main...
Cela vient-il de ma version de Cygwin?

Merci beaucoup de votre aide à tous en tous cas!
je dois partir en déplacement ce soir et demain mais je suis de retour dès vendredi matin donc ne vous étonnez pas si je répond pas tout de suite...
MERCI ENCORE!
A voir également:

3 réponses

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 à 16:28
On est arrivé avec <ital>jipicy et lami20j au script nommé trait2 du style </ital>

Le menteur :-))

Je n'ai rien fait pour l'instant.
The second round is for me :-))
0
enzatto Messages postés 16 Date d'inscription mardi 10 avril 2007 Statut Membre Dernière intervention 12 avril 2007
11 avril 2007 à 16:38
désolé c pas toi oui c gorkimat qui m'avait filé un coup de main.
que ce soit dit.

ps: je suis mort de rire "le menteur..." LOL :)
faut rien laisser au hasard ici!

pps: mais effectivement si jamais tu te sens en forme pour le 2d round je suis super preneur!
0
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 à 23:21
Salut,

voici ma promesse

Sous GNU/Linux Debian
$ cat enzatto.sh
#!/bin/bash
monfich="/home/lami20j/trash/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
$ sh enzatto.sh
$ cat test.txt.out
46611,500 25/09/2006 0062,2 08
46611,500 25/09/2006 0062,2 08
$ cat test.txt | perl -ne 'next unless /08\r?$/;s/(.*):(.*):(.*):(.*)(\s+.*08)$/$1*3600+$2*60+$3 . ",$4$5"/e;print'
46611,500 25/09/2006 0062,2 08
46611,500 25/09/2006 0062,2 08

Et avec Cygwin
un print screen ici https://www.cjoint.com/?elxoxMYIBn
et le code
#!/bin/bash
monfich="/home/lamixp/trash/test.txt"

sed -n '/08\r/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
et en Perl avec une seul ligne

cat test.txt | perl -ne 'next unless /08\r?$/;s/(.*):(.*):(.*):(.*)(\s+.*08)/$1*3600+$2*60+$3 . ",$4$5"/e;print'


Pour redireger dans un fichier il faut faire

cat test.txt | perl -ne 'next unless /08\r?$/;s/(.*):(.*):(.*):(.*)(\s+.*08)/$1*3600+$2*60+$3 . ",$4$5"/e;print' > resultat.txt

0
enzatto Messages postés 16 Date d'inscription mardi 10 avril 2007 Statut Membre Dernière intervention 12 avril 2007
12 avril 2007 à 20:14
RESPECT ULTIME ET INTENSE

RIEN A DIRE T TROP FORT

MERCI!!!!
0
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
12 avril 2007 à 20:28
et en Perl avec une seul ligne
FAIGNANT ! PERLIEN ! ;-DDD

Merci pour le "\r" à la place du "\$", mais bon je suis pas tout le temps fourré à la fenêtre de Bill moi ;-)))
0
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
12 avril 2007 à 20:52
Salut,

Merci à vous Messieurs :-))
0