# Awk et sortie vers un fichier

**URL:** <https://www.debian-fr.org/t/awk-et-sortie-vers-un-fichier/62077>\
**Category:** Programmation\
**Created:** [Février 21, 2016, 8:15 UTC](https://www.debian-fr.org/t/awk-et-sortie-vers-un-fichier/62077 "2016-02-21T20:15:22Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![frk](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/f/bc8723/32.png) [@frk](https://www.debian-fr.org/u/frk)\
**Post date:** [Février 21, 2016, 8:15 UTC](https://www.debian-fr.org/t/awk-et-sortie-vers-un-fichier/62077/1 "2016-02-21T20:15:22Z")

</div>

Bonjour,

J’ai fait un petit script qui fonctionne en ligne de commande (ligne awk) mais pas quand je veux le lancer depuis les scripts nautilus  
Le but est d’extraire les lignes d’un fichier d’entrée (altitude topo) de la forme x y z qui correspondent à la zone géographique souhaitée  
Le fichier d’entrée (coordonnée metriques Lambert93) :

```auto
...
148950 6825000 25.43
149025 6825000 21.97
149100 6825000 17.21
149175 6825000 25.80
149250 6825000 13.25
...
```

le code du script dans .gnome2/nautilus-script :

```auto
while [$# -gt 0]; do
	in_file=$1
	centre=` zenity --entry --title="Centre" --text="Coordonnée centrale : " --entry-text="0,0" `
	rayon=` zenity --entry --title="Rayon" --text="Rayon de l'extraction : " --entry-text="20000" `
	centreX=$(echo $centre|cut -d "," -f 1)
	centreY=$(echo $centre|cut -d "," -f 2)
	limiteEst=$((centreX+rayon))
	limiteOuest=$((centreX-rayon))
	limiteNord=$((centreY+rayon))
	limiteSud=$((centreY-rayon))
	out_file="${in_file%.*}-$limiteOuest-$limiteEst-$limiteSud-$limiteNord.xyz"
	#zenity --info --text="$centreX $centreY $rayon"
	#zenity --info --text="$limiteOuest $limiteEst $limiteSud $limiteNord"
	cat $in_file | awk '($1>=$limiteOuest) && ($1<=$limiteEst) && ($2>=$limiteSud) && ($2<=$limiteNord) {printf ("%d %d %d\n",$1,$2,$3)}' > $out_file
	shift	
done
```

Le principe est d’entrer les coordonnées centrales de la zone a extraire, puis le rayon d’extraction. Avec ces 2 entrées, le script determine les valeurs min et max de chaque axe afin que awk puisse filtrer le fichier topo en entrée (entré par la sélection dans nautilus).  
Le fichier est bien créé, avec le nom que je souhaite, mais est vide ! J’ai essayé quelques alternatives mais sans succès… une idée ?  
merci pour votre aide

---

<div class="post-metadata">

**Author:** ![Watael](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/w/a4c791/32.png) [@Watael](https://www.debian-fr.org/u/Watael)\
**Post date:** [Février 21, 2016, 8:15 UTC](https://www.debian-fr.org/t/awk-et-sortie-vers-un-fichier/62077/2 "2016-02-21T20:15:28Z")

</div>

salut,

un petit exemple :`var="abc"
echo '$var'
$var
echo "$var"
abc`tu dois passer les variables du shell à awk avec autant d’options -v.

---

<div class="post-metadata">

**Author:** ![frk](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/f/bc8723/32.png) [@frk](https://www.debian-fr.org/u/frk)\
**Post date:** [Février 21, 2016, 8:15 UTC](https://www.debian-fr.org/t/awk-et-sortie-vers-un-fichier/62077/3 "2016-02-21T20:15:29Z")

</div>

Merci Watael. ça marche nickel !

```auto
cat $in_file | awk -v lo=$limiteOuest -v le=$limiteEst -v ls=$limiteSud -v ln=$limiteNord '($1>=lo) && ($1<=le) && ($2>=ls) && ($2<=ln) {printf ("%d %d %d\n",$1,$2,$3)}' > $out_file
```

Je ne comprends pas bien pourquoi en ligne de commande la commande initiale fonctionne et qu’il faille faire ce passage de paramètres pour la version scriptée, mais bon c’est cool ça marche. Merci encore
