Rechercher : dans
Par :

[awk] et variables

Dernière réponse le 17 sep 2004 à 19:35:32 B@|-|@N, le 16 sep 2004 à 16:13:09 
 Signaler ce message aux modérateurs

Yo, messires CCmers.

Voilà mon code :

stat -c %y $DATA_DIR/fi.txt > $DATA_DIR/dr.txt;
_dr=`awk 'BEGIN {FS="."} {print $1}' $DATA_DIR/dr.txt`;
_ds=`date +%Y-%m-%d\ %H:%M:%S`;

awk 'BEGIN {FS="\t"} {print $1"\t"$11"\t"$7"\t"$_dr"\t"$_ds"\t0"}' $DATA_DIR/fbon.txt > $DATA_DIR/ffin.txt

Et je n'arrive pas a obtenir dans mon fichier ffin.txt la date $_ds ni la date $_dr. Comment puis-je intégrer des variables "exterieures" dans un awk ?

Bahan

Close the world.||.txen eht nepO

Meilleures réponses pour « [awk] et variables » dans :
[Bash] La variable d'environnement PATH VoirLa variable d'environnement PATH I. Préambule II. C'est quoi le shell ? III. Définition IV. Séance de dissection V. Ajouter un répertoire à la variable PATH VI. Et puis... I. Préambule Sous les systèmes GNU/Linux qu'on le veuille ou...
[Shell] Tester une variable numérique VoirTester une variable numérique    Préambule Dans un environnement "shell", les variables sont, par défaut, de type "chaîne de caractères". De ce fait il n'est pas possible de déclarer une variable de type "entier" (enfin, ceci n'est pas tout à...
Comment récupérer le résultat d'une commande dans une variable VoirComment récupérer le résultat d'une commande dans une variable Préambule Syntaxe Exemples Préambule Il est bien souvent nécessaire de récupérer le résultat d'une commande (ou de son code retour) dans une variable afin de pouvoir...
Javascript - Les variables VoirLe concept de variable Une variable est un objet repéré par son nom, pouvant contenir des données, qui pourront être modifiées lors de l'exécution du programme. En Javascript, les noms de variables peuvent être aussi long que l'on désire,...
Variables d'environnement VoirVariables d'environnement Une variable d'environnement est une valeur dynamique, chargée en mémoire, pouvant être utilisée par plusieurs processus fonctionnant simultanément. Sur la plupart des systèmes d'exploitation, les emplacement de...
PHP - Les variables VoirConcept de variable avec PHP Une variable est un objet repéré par son nom, pouvant contenir des données, qui pourront être modifiées lors de l'exécution du programme. Les variables en langage PHP peuvent être de trois...

1

asevere, le 16 sep 2004 à 17:31:49

RE, re ;o)

Alors pour passer des variable à awk, il faut utiliser l'option -v (-v affectation)
En reprenant ton exemple:

_dr=`awk 'BEGIN {FS="."} {print $1}' $DATA_DIR/dr.txt`;
_ds=`date +%Y-%m-%d\ %H:%M:%S`;
Le awk doit commencer par:
awk -v _dr=$_dr -v _ds=$_ds 'BEGIN ...
Pour la suite, Dans awk les variables n'ont pas besoin d'un $ pour etre affichées, ceci est resevé aux lignes et champs de lignes ($0, $1, $2, etc.)
donc { print $_dr } esy incorrect, il faut utiliser { print _dr }

@++
...Mana mana
Tutudutu...

Répondre à asevere

2

B@|-|@N, le 16 sep 2004 à 17:46:41

Merci.

Une autre question sur le gril : Pour eviter la premiere ligne de mon fichier ? Je dois utiliser NR ?

Car j'ai essayé un NR > 1 mais cela ne fonctionne pas :

awk 'BEGIN {FS="\t";NR>1} {print "blablabla"} $DATA_DIR/fichier1.txt > $DATA_DIR/fichier2.txt;

Bahan

Close the world.||.txen eht nepO

Répondre à B@|-|@N

3

asevere, le 16 sep 2004 à 18:30:36

:)

BEn, il y a plusieurs méthodes, une consisterai a faire un teste sur NR, ou FNR, pour savoir ou on en est dans le traitement, mais c'est pas super classe :(
Il reste les fonction prédéfinies: next semble logique puisqu'elle permet de stoper le traitement et de lire le prochaine enregistrement avant de reprendre. Ceci dit, cette fonction ne colle pas dans un bloque BEGIN donc ça nous aides pas vraiment.
La fonction getline en revanche fait l'affaire :)

... awk 'BEGIN{getline} {...}...

$ ls -l|awk '{ print $1 }'
total
-rw-r--r--
-rw-r--r--
-rw-r--r--
$ ls -l|awk 'BEGIN{ getline }; { print $1 }'
-rw-r--r--
-rw-r--r--
-rw-r--r--
Il existe peut-etre une autre méthode plus direct, mais je ne la connais pas :)

@++
...Mana mana
   Tutudutu...

Répondre à asevere

4

B@|-|@N, le 17 sep 2004 à 09:51:52

Nope, la fonction getline ne me supprime pas la premiere ligne T_T.
Voici le code quand même :

awk 'BEGIN {FS="\";getline;} {print $1"\t"$2"\t"$3"\t"$4"\t"$5" "$6" "$7"\t"$8"\t"$9"\t"$10"\t"$11}' $DATA_DIR/fi.txt > $DATA_DIR/fi2.txt;

Sinon j'ai aussi un autre pb :
ds=`date +%Y-%m-%d\ %H:%M:%S`;
awk -v dr=$dr -v ds=$ds 'BEGIN {FS="\t"} {print $1"\t"$11"\t"$7"\t"dr"\t"ds"\t0"}' $DATA_DIR/fbon.txt > $DATA_DIR/ffin.txt

En fait, comme vous pouvez le voir, la variable ds est une date (+heure). Or c'est justement l'heure qui me pose pb avec le caractere deux points.
awk: cmd. line:1: 15:51:19"
awk: cmd. line:1:   ^ parse error

Comment protéger ma variable ? Car j'ai bien l'impression que c'est cela qui pêche. Il essaye de'interpréter les ":" et cela ne lui réussit pas ^_^.

Bahan

Close the world.||.txen eht nepO

Répondre à B@|-|@N

5

B@|-|@N, le 17 sep 2004 à 10:11:23

Ouh la la.

Bon je m'étais encore trompé (et vive les erreurs de syntaxe ^_^).

awk 'BEGIN {FS="\t";getline;} {print $1"\t"$2"\t"$3"\t"$4"\t"$5" "$6" "$7"\t"$8"\t"$9"\t"$10"\t"$11}' $DATA_DIR/fi.txt > $DATA_DIR/fi2.txt;

J'avais oublié le t du \t dans le begin. ^_^

Mais mon second pb perdure quand meme.

Bahan

Close the world.||.txen eht nepO

Répondre à B@|-|@N

6

asevere, le 17 sep 2004 à 12:37:11

Autant, pour moi, j'avais pas poussé assez loin, alors dans le cas de la date, (ds=$ds) c'est a ce niveau là que ça coince et pas pendant l'affichage comme je le pensais
il suffit de bidouiller l'affectation:
ds="$ds"

@+
...Mana mana
   Tutudutu...

Répondre à asevere

7

B@|-|@N, le 17 sep 2004 à 13:27:58

Nickel.

Merci pour ton aide Asevere.

Bahan

Close the world.||.txen eht nepO

PS : ca veut dire quoi mana mana ?

Répondre à B@|-|@N

8

asevere, le 17 sep 2004 à 13:28:49

De rien :)

A plussse!
...Mana mana
   Tutudutu...

Répondre à asevere

9

 bob031, le 17 sep 2004 à 19:35:32

Bonsoir,

Merci aussi pour cette leçon magistrale !!!!
Particulièrement intéressante !!!!

bob

Répondre à bob031