[awk] et variables
Fermé
B@|-|@N
Messages postés
386
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
7 décembre 2007
-
16 sept. 2004 à 16:13
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 - 22 déc. 2009 à 16:01
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 - 22 déc. 2009 à 16:01
A voir également:
- Awk variable externe
- Chkdsk disque dur externe - Guide
- Vba range avec variable ✓ - Forum VB / VBA
- Ram externe - Forum Matériel & Système
- Lecteur cd externe voiture norauto - Forum Autoradio
19 réponses
asevere
Messages postés
13084
Date d'inscription
lundi 28 janvier 2002
Statut
Webmaster
Dernière intervention
23 novembre 2024
426
16 sept. 2004 à 17:31
16 sept. 2004 à 17:31
RE, re ;o)
Alors pour passer des variable à awk, il faut utiliser l'option -v (-v affectation)
En reprenant ton exemple:
donc { print $_dr } esy incorrect, il faut utiliser { print _dr }
@++
...Mana mana
Tutudutu...
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...
B@|-|@N
Messages postés
386
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
7 décembre 2007
62
16 sept. 2004 à 17:46
16 sept. 2004 à 17:46
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 :
Bahan
Close the world.||.txen eht nepO
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
asevere
Messages postés
13084
Date d'inscription
lundi 28 janvier 2002
Statut
Webmaster
Dernière intervention
23 novembre 2024
426
16 sept. 2004 à 18:30
16 sept. 2004 à 18:30
:)
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 :)
@++
...Mana mana
Tutudutu...
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...
B@|-|@N
Messages postés
386
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
7 décembre 2007
62
17 sept. 2004 à 09:51
17 sept. 2004 à 09:51
Nope, la fonction getline ne me supprime pas la premiere ligne T_T.
Voici le code quand même :
Sinon j'ai aussi un autre pb :
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.
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
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
B@|-|@N
Messages postés
386
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
7 décembre 2007
62
17 sept. 2004 à 10:11
17 sept. 2004 à 10:11
Ouh la la.
Bon je m'étais encore trompé (et vive les erreurs de syntaxe ^_^).
J'avais oublié le t du \t dans le begin. ^_^
Mais mon second pb perdure quand meme.
Bahan
Close the world.||.txen eht nepO
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
asevere
Messages postés
13084
Date d'inscription
lundi 28 janvier 2002
Statut
Webmaster
Dernière intervention
23 novembre 2024
426
17 sept. 2004 à 12:37
17 sept. 2004 à 12:37
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...
il suffit de bidouiller l'affectation:
ds="$ds"
@+
...Mana mana
Tutudutu...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
B@|-|@N
Messages postés
386
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
7 décembre 2007
62
17 sept. 2004 à 13:27
17 sept. 2004 à 13:27
Nickel.
Merci pour ton aide Asevere.
Bahan
Close the world.||.txen eht nepO
PS : ca veut dire quoi mana mana ?
Merci pour ton aide Asevere.
Bahan
Close the world.||.txen eht nepO
PS : ca veut dire quoi mana mana ?
asevere
Messages postés
13084
Date d'inscription
lundi 28 janvier 2002
Statut
Webmaster
Dernière intervention
23 novembre 2024
426
17 sept. 2004 à 13:28
17 sept. 2004 à 13:28
De rien :)
A plussse!
...Mana mana
Tutudutu...
A plussse!
...Mana mana
Tutudutu...
bob031
Messages postés
8158
Date d'inscription
samedi 7 août 2004
Statut
Membre
Dernière intervention
1 septembre 2014
473
17 sept. 2004 à 19:35
17 sept. 2004 à 19:35
Bonsoir,
Merci aussi pour cette leçon magistrale !!!!
Particulièrement intéressante !!!!
bob
Merci aussi pour cette leçon magistrale !!!!
Particulièrement intéressante !!!!
bob
Bonjour,
je rencontre un pb similaire, mais je n'arrive pas à le résoudre avec vos explications, ni aucune autre sur le net ! je pete les plombs ca fait 3 jours que je suis sur cette ligne de commande à la #%!@ !!! :p
voila mon pb, si quelqu'un peut aider... :
je veux chercher une date ecrite dans un fichier, puis afficher la ligne avec la date, et quelques unes des lignes qui la suivent
alors chercher une date et afficher les lignes j y arrive
awk 'BEGIN { print "Rapport d erreur" ; print "------- -------" }
/"18/12/09"/ { print "\n\nErreur relevée : " ; print $1,$2,$3,$4,$5,$6,$7 ; getline ; print $0 ; getline ; print $0 } ' mon_fichier.err
sauf que quand je veux passer cette date par un PARAMETRE, je n'y arrive pas :
DATE="18/12/09"
awk 'BEGIN {date=$DATE} { print "Rapport d erreur" ; print "------- -------" }
/date/ { print "\n\nErreur relevée : " ; if ( $6 == date) { print $1,$2,$3,$4,$5,$6,$7 ; getline ; print $0 ; getline ; print $0 } } ' mon_fichier.err
>>me jète !!!
et si je déplace BEGIN apres la déf de la variable je me fais jeter, avec ou sans le -v
j'en peux plus, aidez moi s'il vous plaiiiiit :)
je rencontre un pb similaire, mais je n'arrive pas à le résoudre avec vos explications, ni aucune autre sur le net ! je pete les plombs ca fait 3 jours que je suis sur cette ligne de commande à la #%!@ !!! :p
voila mon pb, si quelqu'un peut aider... :
je veux chercher une date ecrite dans un fichier, puis afficher la ligne avec la date, et quelques unes des lignes qui la suivent
alors chercher une date et afficher les lignes j y arrive
awk 'BEGIN { print "Rapport d erreur" ; print "------- -------" }
/"18/12/09"/ { print "\n\nErreur relevée : " ; print $1,$2,$3,$4,$5,$6,$7 ; getline ; print $0 ; getline ; print $0 } ' mon_fichier.err
sauf que quand je veux passer cette date par un PARAMETRE, je n'y arrive pas :
DATE="18/12/09"
awk 'BEGIN {date=$DATE} { print "Rapport d erreur" ; print "------- -------" }
/date/ { print "\n\nErreur relevée : " ; if ( $6 == date) { print $1,$2,$3,$4,$5,$6,$7 ; getline ; print $0 ; getline ; print $0 } } ' mon_fichier.err
>>me jète !!!
et si je déplace BEGIN apres la déf de la variable je me fais jeter, avec ou sans le -v
j'en peux plus, aidez moi s'il vous plaiiiiit :)
dubcek
Messages postés
18755
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
14 novembre 2024
5 622
22 déc. 2009 à 12:20
22 déc. 2009 à 12:20
hello
essaye
essaye
DATE="18/12/09" awk 'BEGIN {date='"$DATE"'}.{ print "Rapport d erreur" ; print "------- -------" } $0 ~ date { print "\n\nErreur relevé....
dubcek
Messages postés
18755
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
14 novembre 2024
5 622
22 déc. 2009 à 13:22
22 déc. 2009 à 13:22
correction
parce que si je fais date=18/12/09 il va créer une variable numérique, 18 divisé par 12 divisé par 9, avec date="18/12/09" j'ai une date
date="'"$DATE"'"}
parce que si je fais date=18/12/09 il va créer une variable numérique, 18 divisé par 12 divisé par 9, avec date="18/12/09" j'ai une date
ca ne fonctionne toujours pas : :-/
>DATE="18/12/09"
> awk 'BEGIN { _date='"$DATE"'} /_date/ { print $0 } ' monfichier
> awk 'BEGIN { _date="'"$DATE"'"} /_date/ { print $0 } ' monfichier
ne ramenent rien, alors que j'ai bien des lignes avec 18/12/09 ..
>DATE="18/12/09"
> awk 'BEGIN { _date='"$DATE"'} /_date/ { print $0 } ' monfichier
> awk 'BEGIN { _date="'"$DATE"'"} /_date/ { print $0 } ' monfichier
ne ramenent rien, alors que j'ai bien des lignes avec 18/12/09 ..
dubcek
Messages postés
18755
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
14 novembre 2024
5 622
22 déc. 2009 à 15:01
22 déc. 2009 à 15:01
et
awk 'BEGIN { _date="'"$DATE"'"} ; $0 ~ _date { print $0 } ' monfichier
dubcek
Messages postés
18755
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
14 novembre 2024
5 622
22 déc. 2009 à 15:11
22 déc. 2009 à 15:11
dans awk : _date=guillemet quote guillemet $DATE guillemet quote guillemet }
$ DATE=18/12/09 $ $ cat a 18/12/09 aaa $ awk 'BEGIN { _date="'"$DATE"'"} ; $0 ~ _date { print $0 } ' a 18/12/09 $
pas chez moi (pour info je suis sur Sun Solaris)
> echo $DATE
18/12/09
> cat /tmp/a
p
Q
r 18/12/09
q
Q
x
q
> awk 'BEGIN { _date="'"$DATE"'"} ; $0 ~ _date { print $0 } ' >
awk: syntax error near line 1
awk: bailing out near line 1
> echo $DATE
18/12/09
> cat /tmp/a
p
Q
r 18/12/09
q
Q
x
q
> awk 'BEGIN { _date="'"$DATE"'"} ; $0 ~ _date { print $0 } ' >
awk: syntax error near line 1
awk: bailing out near line 1
dubcek
Messages postés
18755
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
14 novembre 2024
5 622
22 déc. 2009 à 15:21
22 déc. 2009 à 15:21
utilise nawk
ca marche avec nawk ! mais par contre je ne comprends rien à ta ligne...
nawk 'BEGIN { _date="'"$DATE"'"} ; $0 ~ _date { print $0 }' toto
$0 ~ _date : veut dire que je cherche la chaine _date j'imagine ??
et si je veux imbriquer une seconde recherche avec le mot clé Erreur ?? comment je fais ?
un truc du genre :
nawk 'BEGIN { _date="'"$DATE"'"} ; $0 ~ _date ~ Erreur { print $0 }' toto
nawk 'BEGIN { _date="'"$DATE"'"} ; $0 ~ _date { print $0 }' toto
$0 ~ _date : veut dire que je cherche la chaine _date j'imagine ??
et si je veux imbriquer une seconde recherche avec le mot clé Erreur ?? comment je fais ?
un truc du genre :
nawk 'BEGIN { _date="'"$DATE"'"} ; $0 ~ _date ~ Erreur { print $0 }' toto
dubcek
Messages postés
18755
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
14 novembre 2024
5 622
22 déc. 2009 à 15:38
22 déc. 2009 à 15:38
sur Solaris, toujours utiliser nawk (new awk)
il faut utiliser des opérateurs logiques, && pour AND, ¦¦ pour OR, ! pour NOT
$0 ~ _date && /Erreur/ { ...
/texte/ et $0 ~ /texte/ c'est la même chose, MAIS _date est une variable, Erreur est un texte
il faut utiliser des opérateurs logiques, && pour AND, ¦¦ pour OR, ! pour NOT
$0 ~ _date && /Erreur/ { ...
/texte/ et $0 ~ /texte/ c'est la même chose, MAIS _date est une variable, Erreur est un texte
dubcek
Messages postés
18755
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
14 novembre 2024
5 622
22 déc. 2009 à 16:01
22 déc. 2009 à 16:01
bonnes fêtes, alors