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 -
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!
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:
- Cygwin - traitement colonnes suite ...et fin?
- Reconsidérer le traitement de vos informations à des fins publicitaires - Accueil - Réseaux sociaux
- Fin des zfe - Guide
- Comment faire des colonnes sur word - Guide
- Classer par ordre alphabétique excel plusieurs colonnes - Guide
- Traitement de texte gratuit - Guide
3 réponses
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 :-))
Le menteur :-))
Je n'ai rien fait pour l'instant.
The second round is for me :-))
Salut,
voici ma promesse
Sous GNU/Linux Debian
Et avec Cygwin
un print screen ici https://www.cjoint.com/?elxoxMYIBn
et le code
Pour redireger dans un fichier il faut faire
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.txtet 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
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!