Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 23/07/2016, à 00:36

Swiss_Knight

☑ awk échapper les accolades et les crochets ?

Salut,

je teste un peu awk mais je butte sur des trucs vraiment bêtes : je n'arrive pas à lui faire print des accolades ouvrantes et fermantes ni des crochets ... j'ai essayé ça pourtant : \{ \} \[ \] mais rien n'y fait...

:S

EDIT : bon ce n'est pas grave, avec sed ça marche beaucoup beaucoup mieux ce genre de caractères :-)

Dernière modification par Swiss_Knight (Le 23/07/2016, à 21:53)


xuniL

Hors ligne

#2 Le 23/07/2016, à 07:28

credenhill

Re : ☑ awk échapper les accolades et les crochets ?

hello
de quelle manière ?

$ awk 'BEGIN { print "{}{}[][]"}'
{}{}[][]

Hors ligne

#3 Le 23/07/2016, à 11:45

Swiss_Knight

Re : ☑ awk échapper les accolades et les crochets ?

Hello, smile
j'ai effacé ce que j'avais fait, mais en gros je devais traduire un simple tableau avec une ligne d’entête dans un objet JSON, donc c'est bourré d'accolades, crochets, deux-points et guillemets.
Je ne sais pas ce qui ennuyait précisément dans le tas... mais ça ne voulait pas.

Ça devait ressembler à ça, grosso modo :

    awk -F " " ' BEGIN { print {
    "type": "FeatureCollection",
    "baseparam": { "type": "name", "properties": { "name": "ref:os:define:baseparam:code:8080" } },\n #"features": [\n
    }
    }
    NR <= 1 {next}
    $0 { print { 
    "type": "Feature", "properties": { "Density": $4, "Fx": $5, "Fy": $6, "Fz": $7 },
    "objetproperties": { "type": "Type01", "cartesianT": [ $1, $2, $3 ] } },\n
    }
    ' "${WORKINGDIR}${FILEIN}" > "${WORKINGDIR}${FILEOUT}";

Et le tableau de base à ça :

//x y t Density Fx Fy Fz
2018.26229858 1199.05871582 61.19189453 8.496380 -0.859459 0.135245 -0.492989
2018.89694214 1203.62719727 61.19189453 8.477986 -0.786923 0.379727 -0.486374
2020.11767578 1048.30029297 65.76031494 8.488781 -0.489955 -0.631386 0.601079
...
..
.

Dernière modification par Swiss_Knight (Le 23/07/2016, à 11:52)


xuniL

Hors ligne

#4 Le 23/07/2016, à 12:18

credenhill

Re : ☑ awk échapper les accolades et les crochets ?

l'accolade, les : sont en dehors des "

 BEGIN { print {
    "type": "FeatureCollection",
    "baseparam": { "type": "name", "properties": { "name": "re....

Hors ligne

#5 Le 23/07/2016, à 13:19

Swiss_Knight

Re : ☑ awk échapper les accolades et les crochets ?

Je crains ne pas avoir compris la réponse là. smile

En fait, tout ce qui est dans les accolades principales d'awk ( celles qui commencent à chaque fois avant les print ) ça doit sortir tel quel dans le fichier en sortie.
Chaque caractère doit y être, guillemets compris.
Ils ne doivent pas du tout être interprétés comme caractères spéciaux là-dedans. 
Du moins c'est ce que je souhaite.


xuniL

Hors ligne

#6 Le 23/07/2016, à 14:07

credenhill

Re : ☑ awk échapper les accolades et les crochets ?

montre le texte qui doit être affiché

edit : comme ça ?

{ "type": "FeatureCollection", "baseparam": { "type": "name", "properties": { "name": "ref:os:define:baseparam:code:8080" } },
 #"features": [
 }
{ "type": "Feature", "properties": { "Density":8.496380 "Fx":-0.859459 "Fy":0.135245 "Fz":-0.492989}, "objetproperties": { "type": "Type01", "cartesianT": [2018.26229858 1199.05871582 61.19189453] } },
 }
{ "type": "Feature", "properties": { "Density":8.477986 "Fx":-0.786923 "Fy":0.379727 "Fz":-0.486374}, "objetproperties": { "type": "Type01", "cartesianT": [2018.89694214 1203.62719727 61.19189453] } },
 }
{ "type": "Feature", "properties": { "Density":8.488781 "Fx":-0.489955 "Fy":-0.631386 "Fz":0.601079}, "objetproperties": { "type": "Type01", "cartesianT": [2020.11767578 1048.30029297 65.76031494] } },
 }

Dernière modification par credenhill (Le 23/07/2016, à 14:31)

Hors ligne

#7 Le 23/07/2016, à 17:09

Swiss_Knight

Re : ☑ awk échapper les accolades et les crochets ?

sans le dièse en début de deuxième ligne c'est ça oui.
(et sans la toute dernière virgule du fichier mais ça j'en fais mon affaire)

en sortie de console j'ai à peu près tout le code qui s'affiche avec des "^ syntax error" le premier étant sur la première accolade après le print :

awk: cmd. line:1:  BEGIN { print {
awk: cmd. line:1:                ^ syntax error

Comme ceci.

Dernière modification par Swiss_Knight (Le 23/07/2016, à 17:12)


xuniL

Hors ligne

#8 Le 23/07/2016, à 19:15

LeoMajor

Re : ☑ awk échapper les accolades et les crochets ?

bonjour,

clear; awk 'BEGIN { printf("%s\n","{ \"type\": \"FeatureCollection\", \"baseparam\": { \"type\": \"name\", \"properties\": { \"name\": \"ref:os:define:baseparam:code:8080\" } }, \n}") }; {printf("%s\n","{\"type\": \"Feature\", \"properties\": { \"Density\":"$4" \"Fx\":"$5" \"Fy\":"$6" \"Fz\":"$7"}, \"objetproperties\": { \"type\": \"Type01\", \"cartesianT\": ["$1" "$2" "$3"] } }, \n}") }' /tmp/test

cela donne avec ton tableau du post #3 en /tmp/test

{ "type": "FeatureCollection", "baseparam": { "type": "name", "properties": { "name": "ref:os:define:baseparam:code:8080" } }, 
}
{"type": "Feature", "properties": { "Density":8.496380 "Fx":-0.859459 "Fy":0.135245 "Fz":-0.492989}, "objetproperties": { "type": "Type01", "cartesianT": [2018.26229858 1199.05871582 61.19189453] } }, 
}
{"type": "Feature", "properties": { "Density":8.477986 "Fx":-0.786923 "Fy":0.379727 "Fz":-0.486374}, "objetproperties": { "type": "Type01", "cartesianT": [2018.89694214 1203.62719727 61.19189453] } }, 
}
{"type": "Feature", "properties": { "Density":8.488781 "Fx":-0.489955 "Fy":-0.631386 "Fz":0.601079}, "objetproperties": { "type": "Type01", "cartesianT": [2020.11767578 1048.30029297 65.76031494] } }, 
}

Hors ligne

#9 Le 23/07/2016, à 21:20

Swiss_Knight

Re : ☑ awk échapper les accolades et les crochets ?

Merci, je vais tester ça. Ça fonctionne bien! big_smile
C'était donc les guillemets qu'il fallait échapper... Je me sens bien niais là.

Petite question, que signifie le %s en début de print ?
> Je viens de voir que c'était pas un print justement... mais un printf du coup je comprends.
Merci.

Dernière modification par Swiss_Knight (Le 23/07/2016, à 21:56)


xuniL

Hors ligne