Pages : 1
#1 Le 27/06/2006, à 16:11
- benjou
[résolu]Bug dans awk???
Bon je crois plutot que le bug estt dans l'utilisateur neanmoins, je ne comprends pas.
J'ai un fichier texte (/tmp/coord):
46.1859030 6.1402170
46.1860000 6.1426879
46.1848295 6.1466915
46.1849220 6.1492917
si je
benoit@laptop-benoit:~/Tracks$ awk '{print $1}' /tmp/coord
46.1859030
46.1860000
46.1848295
46.1849220
si je
benoit@laptop-benoit:~/Tracks$ awk '{print $2}' /tmp/coord
6.1402170
6.1426879
6.1466915
6.1492917
si je
benoit@laptop-benoit:~/Tracks$ awk '{print $1 $2}' /tmp/coord
46.18590306.1402170
46.18600006.1426879
46.18482956.1466915
46.18492206.1492917
ou si je
benoit@laptop-benoit:~/Tracks$ awk '{print $1, $2}' /tmp/coord
46.1859030 6.1402170
46.1860000 6.1426879
46.1848295 6.1466915
46.1849220 6.1492917
Jusqu'ici c' est parfait j'ai bien le champ $1 ou $2 ou les deux
Par contre si je
benoit@laptop-benoit:~/Tracks$ awk '{print $2 $1}' /tmp/coord
46.1859030
46.1860000
46.1848295
46.1849220
ou si je
benoit@laptop-benoit:~/Tracks$ awk '{print $2, $1}' /tmp/coord
46.1859030
46.1860000
46.1848295
46.1849220
:|:|
Pourquoi je peux pas avoir le champ $2 avant le champ $1 ????
Dernière modification par benjou (Le 27/06/2006, à 18:25)
écrasons l'infâme
Hors ligne
#2 Le 27/06/2006, à 16:51
- cep
Hors ligne
#3 Le 27/06/2006, à 16:59
- benjou
Re : [résolu]Bug dans awk???
Ben ca marche
benoit@laptop-benoit:~/Tracks$ awk '{ print $2 " " $1 }' /tmp/coord
6.1402170 46.1859030
6.1426879 46.1860000
6.1466915 46.1848295
6.1492917 46.1849220
Si tu as des explications, je suis preneur...
écrasons l'infâme
Hors ligne
#4 Le 27/06/2006, à 17:00
- Cathou
Re : [résolu]Bug dans awk???
Avant de mettre en cause awk, es-tu certain que ton fichier de départ ne change pas entre-temps?
Si c'est dans le cadre d'un script, ça peut arriver..
Tout se passe comme si le deuxième champ a disparu de chaque ligne.
#5 Le 27/06/2006, à 17:09
- benjou
Re : [résolu]Bug dans awk???
ca marche plus
benoit@laptop-benoit:~/Tracks$ cat /tmp/coord
46.1859030 6.1402170
46.1860000 6.1426879
46.1848295 6.1466915
46.1849220 6.1492917
benoit@laptop-benoit:~/Tracks$ awk '{ print $2 " " $1 }' /tmp/coord
46.1859030
46.1860000
46.1848295
6.1492917 46.1849220
écrasons l'infâme
Hors ligne
#6 Le 27/06/2006, à 17:12
- benjou
Re : [résolu]Bug dans awk???
@Cathou
Je te mets le 'cat' avant pour te montrer que le deuxieme champs existe toujours
POur mon dernier exemple c' est encore plus space: Seule la derniere ligne marche...
écrasons l'infâme
Hors ligne
#7 Le 27/06/2006, à 17:17
- Cathou
Re : [résolu]Bug dans awk???
Dans ce cas, il est possible que ton fichier soit pas du texte pur.
Et que des morceaux binaires, que tu vois pas avec cat, fasse partir awk en vrac.
Regarde ton fichier avec un viewer hexa..
#8 Le 27/06/2006, à 17:19
- benjou
Re : [résolu]Bug dans awk???
Bon, si je copie-colle ekechose dans /tmp/coord en utilisant gedit, ca marche par contre si mon fichier /tmp/coord est cree par mon script
cat "$i"|grep -v "#"|sed s/,/\ /g >/tmp/coord
alors ca ne marche plus...
Je suspecte un probleme de fin de ligne non reconnu. Si quelqu'un s'y connait...
écrasons l'infâme
Hors ligne
#9 Le 27/06/2006, à 17:28
- Cathou
Re : [résolu]Bug dans awk???
Et les guillemets dans l'expression sed ?!
#10 Le 27/06/2006, à 17:31
- cep
Re : [résolu]Bug dans awk???
Je n'ai peut-être pas bien compris ce que tu veux réaliser.
Ajouter une seule fois le résultat de awk dans une liste ?
:~$ nano liste
:~$ cat liste
10 20 30 40 50 60 70 80
:~$ cat liste | awk '{ print $4 " " $2 }' >>liste
:~$ cat liste
10 20 30 40 50 60 70 80
40 20
Hors ligne
#11 Le 27/06/2006, à 17:39
- benjou
Re : [résolu]Bug dans awk???
Ce que je veux faire:
J'ai une liste .csv de coordonnees LAT,LON
elle commence par 4-5 lignes commentées (avec un #) que je veux enlever (d'où le grep -v "#")
Ce qu je veux produire est une list .csv de coordonnées LON, LAT d'où le print $2,$1 afin d'inverser LAT et LON.
Grosso modo j'ai un fichier
#voila une ligne commentée
#et une autre
45.9898,5.4576
45.9897,5.4577
.
.
.
45.9896,5.4578
que je veux transformer en
5.4576,45.9898
5.4577,45.9897
.
.
.
5.4578,45.9896
C'est aussi bête que cela..
écrasons l'infâme
Hors ligne
#12 Le 27/06/2006, à 17:52
- Cathou
Re : [résolu]Bug dans awk???
cat LATLON | grep -v '#' | sed -e 's/,/\ /' | awk '{print $2 "," $1}' > LONLAT
devrait marcher en principe..
#13 Le 27/06/2006, à 18:02
- cep
Hors ligne
#14 Le 27/06/2006, à 18:04
- Cathou
Re : [résolu]Bug dans awk???
Quoi qu'il en soit, ça sent le mec qui fait mumuse avec google earth, ça
Dernière modification par Cathou (Le 27/06/2006, à 18:05)
#15 Le 27/06/2006, à 18:05
- benjou
Re : [résolu]Bug dans awk???
Ton script marche sur mon exemple
benoit@laptop-benoit:~/Tracks$ cat /tmp/coord
#voila une ligne commentée
#et une autre
45.9898,5.4576
45.9897,5.4577
45.9896,5.4578
benoit@laptop-benoit:~/Tracks$ cat /tmp/coord | grep -v '#' | sed -e 's/,/\ /' | awk '{print $2 "," $1}'
5.4576,45.9898
5.4577,45.9897
5.4578,45.9896
benoit@laptop-benoit:~/Tracks$
Malheureusement, il ne marche pas sur mon vrai fichier
benoit@laptop-benoit:~/Tracks$ cat $i
# Latitude, Longitude and UTM coordinates are in WGS84 datum
#
# Each record includes the following fields
#
# Latitude in decimal degrees (negative is south)
# Longitude in decimal degrees (negative is west)
46.1859030,6.1402170
46.1860000,6.1426879
46.1848295,6.1466915
46.1849220,6.1492917
46.1817671,6.1573709
.
.
46.0261545,6.4631419
46.0257997,6.4617573
benoit@laptop-benoit:~/Tracks$ cat $i | grep -v '#' | sed -e 's/,/\ /' | awk '{print $2 "," $1}'
,46.1859030
,46.1860000
,46.1848295
,46.1849220
Mon fichier en question vient d'une appli marchant sous wine, cela pourrait il etre le problème??
Merci en tout cas pour l'aide.
Dernière modification par benjou (Le 27/06/2006, à 18:08)
écrasons l'infâme
Hors ligne
#16 Le 27/06/2006, à 18:08
- benjou
Re : [résolu]Bug dans awk???
Quoi qu'il en soit, ça sent le mec qui fait mumuse avec google earth, ça
Clair!
C'est exactement ca, je cherche a faire un script pour regarder ses données GPS avec googleearth mais ces nouilles mettent la lon avant la lat ce qui est completement...
écrasons l'infâme
Hors ligne
#17 Le 27/06/2006, à 18:15
- Cathou
Re : [résolu]Bug dans awk???
..d'une appli marchant sous wine..
aaaaaarrrrghhhh
Oui il est bien possible que ton problème vienne de là
Essaye ça:
cat LONLAT | sed 's/\x0D$//' | grep -v '#' | sed -e 's/,/\ /' | awk '{print $2 "," $1}' > LATLON
#18 Le 27/06/2006, à 18:20
- benjou
Re : [résolu]Bug dans awk???
AYÉÉÉ
zé trouvé. j'utilise sed opur changer tous les "carriage returns" (\r) par des "new lines" (\l)
Ensuite j'utilise awk en lui disant que les virgule séparent les "fields" (-F,) et ça roule
benoit@laptop-benoit:~/Tracks$ cat $i | grep -v '#' | sed -e 's/\r/\l/' | awk -F, '{print $2 "," $1}' 6.1402170,46.1859030
6.1426879,46.1860000
6.1466915,46.1848295
Merci de votre aide!
écrasons l'infâme
Hors ligne
#19 Le 27/06/2006, à 18:22
- cep
Re : [résolu]Bug dans awk???
Tu peux d'ailleurs tout faire avec awk
:~$ echo "#commentaire 1
> # commentaire 2 essai de liste
> 10 20 30 40 50
> 60 70 80 90 100
> 11 22 33 44 55
> 66 77 88 99 111" > liste
:~$ cat liste | awk '! (/^ *#/ || /^$/) { print $0 }' | awk '{ print $4 ", " $2 }' >liste2
:~$ cat liste2
40, 20
90, 70
44, 22
99, 77
Penser à enlever l'espace après la virgule ", " s'il n'est pas nécessaire.
Bonne continuation à vous deux.
cep
Hors ligne
#20 Le 27/06/2006, à 18:25
- Cathou
Re : [résolu]Bug dans awk???
Moralité.. awk est hors de cause. Ouf
#21 Le 27/06/2006, à 19:02
- benjou
Re : [résolu]Bug dans awk???
Moralité.. awk est hors de cause. Ouf
Je n'en ai jamais douté
écrasons l'infâme
Hors ligne
Pages : 1