Cygwin - traitement colonnes suite ...et fin?

Résolu
enzatto Messages postés 16 Date d'inscription   Statut Membre Dernière intervention   -  
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   -
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!

3 réponses

lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
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   Statut Membre Dernière intervention  
 
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   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
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   Statut Membre Dernière intervention  
 
RESPECT ULTIME ET INTENSE

RIEN A DIRE T TROP FORT

MERCI!!!!
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
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   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Salut,

Merci à vous Messieurs :-))
0