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 17/07/2012, à 13:04

jedineofr

[RESOLU] [AWK] chercher dans des quotes

Bonjour à tous smile

Je chercher a extraire certaines informations de ce fichier test.txt :

inputFileName="TESTFICHIERENTRE2012.dat", fileId="FILEID1234567890123", status="OK", statusDate="2012/06/29", errorCode="0", outputFileName="TESTFICHIERSORTIE2012.dat"

A partir du fileID, je cherche à retrouver le fichier d'entrée.
J'ai essayé avec

#Préparation de awk
FileID="FILEID1234567890123" #FileID obtenu normalement par un autre moyen
fileIdTMP="fileId=\"${FileID}\"" #Concaténe FileID & reste du champ pour obtenir fileId="FILEID1234567890123"

#Commande awk
awk 'BEGIN {FS=", ";OFS=","} {if ($2 == "${fileIdTMP}") {print $1}}' test.txt > sortie.txt 

Mais je n'obtiens rien ! roll
Je me doute que awk n'aime pas les double quotes, que j'ai pourtant échappé : \" sad

Avez-vous une solution ?

Merci d'avance wink

Dernière modification par jedineofr (Le 18/07/2012, à 12:30)


Ubuntu 8.04 LTS -> Ubuntu 8.10 -> Ubuntu 9.04 -> Ubuntu 9.10 -> Ubuntu 10.04 LTS -> Lubuntu 14.04 > Ubuntu 14.04 > Ubuntu 16.04 LTS > Ubuntu 18.04 LTS
Asus ROG G551JW-DM379T (i7 4750HQ, GTX960M, Dd 1 To + SSD 24 Go, Windows 10 + Ubuntu)

Hors ligne

#2 Le 17/07/2012, à 14:05

Hizoka

Re : [RESOLU] [AWK] chercher dans des quotes

Sans AWK et en FULL bash tongue :

# On charge le fichier dans une variable
test=$(< test.txt)

# On vire les virgules
test=${test//,}

# Et on fait une eval de la variable
eval ${test}

# Et maintenant on a toutes les variables
echo ${fileId}

et avec sed :

sed 's/.*fileId="// ; s/".*//' test.txt

KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#3 Le 17/07/2012, à 14:24

credenhill

Re : [RESOLU] [AWK] chercher dans des quotes

hello

$ awk -F'"' '/fileId/ {print $4}' fichier
FILEID1234567890123

Hors ligne

#4 Le 17/07/2012, à 16:29

jedineofr

Re : [RESOLU] [AWK] chercher dans des quotes

Déjà, merci pour vos réponses smile

Mais je pense avoir mal exprimé mon besoin et je m'en excuse sad
A partir du fileID que je connait (récupéré par une liste), je cherche à connaitre le nom du fichier d'entrée.

Ainsi un pseudo-algo serait

Pour chaque FileID ds ListeFileID.txt
     nomFichierLog="log.txt"
     nomFichierEntre=awk(FileId) $nomFichierLog #THE ligne qui me pose probléme :(
     [...]
     traitement(nomFichierEntre)
     [...]
FinPour #La boucle tourne sur tous les fileID et effectue donc des traitement sur les fichiers en entrée

Ainsi avec le fichier log.txt qui ressemble à ca :

inputFileName="TESTFICHIERENTRE0132.dat", fileId="FILEID1234567890001", status="OK", statusDate="2012/06/29", errorCode="0", outputFileName="TESTFICHIERSORTIE0001.dat"
inputFileName="TESTFICHIERENTRE0589.dat", fileId="FILEID1234567890002", status="KO", statusDate="2012/06/30", errorCode="1", outputFileName="TESTFICHIERSORTIE0002.dat"

Je devrais obtenir

  • au 1er passage : nomFichierEntre=TESTFICHIERENTRE0132.dat

  • au 2iem passage : nomFichierEntre=TESTFICHIERENTRE0589.dat

En partant, par exemple, de la solution de credenhill, je teste avec :

#Je recupére un FileID contenu dans une liste
fileIdTMP=FILEID1234567890001 ou FILEID1234567890002 #Exemple pour tester le programme

#awk va me donner, grace au FileID, le nom du fichier en entrée
awk -F'"' '{if ($4 == "${fileIdTMP}") {print $2}}' log.txt

Ma ca fonctionne toujours pas sad

Dernière modification par jedineofr (Le 17/07/2012, à 16:33)


Ubuntu 8.04 LTS -> Ubuntu 8.10 -> Ubuntu 9.04 -> Ubuntu 9.10 -> Ubuntu 10.04 LTS -> Lubuntu 14.04 > Ubuntu 14.04 > Ubuntu 16.04 LTS > Ubuntu 18.04 LTS
Asus ROG G551JW-DM379T (i7 4750HQ, GTX960M, Dd 1 To + SSD 24 Go, Windows 10 + Ubuntu)

Hors ligne

#5 Le 17/07/2012, à 17:00

Haleth

Re : [RESOLU] [AWK] chercher dans des quotes

Ok

alex@jack:~$ cat test
inputFileName="TESTFICHIERENTRE0132.dat", fileId="FILEID1234567890001", status="OK", statusDate="2012/06/29", errorCode="0", outputFileName="TESTFICHIERSORTIE0001.dat"
inputFileName="TESTFICHIERENTRE0589.dat", fileId="FILEID1234567890002", status="KO", statusDate="2012/06/30", errorCode="1", outputFileName="TESTFICHIERSORTIE0002.dat"


alex@jack:~$ cat fileid 
FILEID1234567890001
FILEID1234567890002

alex@jack:~$ cat test.sh 
#!/bin/bash
while read line
do
    grep "$line" test | awk -F'"' '/inputFileName/ {print $2}'
done < fileid


alex@jack:~$ ./test.sh 
TESTFICHIERENTRE0132.dat
TESTFICHIERENTRE0589.dat

Ubuntu is an ancien African word which means "I can't configure Debian"

Because accessor & mutator are against encapsulation (one of OOP principles), good OOP-programmers do not use them. Obviously, procedural-devs do not. In fact, only ugly-devs are still using them.

Hors ligne

#6 Le 18/07/2012, à 07:57

credenhill

Re : [RESOLU] [AWK] chercher dans des quotes

hello

$ awk -F'"' 'NF<2 {x[$1]=$1; next} x[$4] {print $2}'  fileid log.txt
TESTFICHIERENTRE0132.dat
TESTFICHIERENTRE0589.dat
$ 

Hors ligne

#7 Le 18/07/2012, à 10:12

Postmortem

Re : [RESOLU] [AWK] chercher dans des quotes

Salut,

credenhill a écrit :

hello

$ awk -F'"' 'NF<2 {x[$1]=$1; next} x[$4] {print $2}'  fileid log.txt
TESTFICHIERENTRE0132.dat
TESTFICHIERENTRE0589.dat
$ 

J'étais entrain de me demander comment marchait ta commande... Puis j'ai vu que t'avais mis les 2 fichiers en entrée de awk !!
C'est carrément bien vu je trouve, pas de boucle et donc un seul awk, je note ça dans un coin ! Merki !


Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#8 Le 18/07/2012, à 10:15

credenhill

Re : [RESOLU] [AWK] chercher dans des quotes

le NF<2 permet de savoir si on traite le fichier fileid ou l'autre

Hors ligne

#9 Le 18/07/2012, à 10:27

Postmortem

Re : [RESOLU] [AWK] chercher dans des quotes

credenhill a écrit :

le NF<2 permet de savoir si on traite le fichier fileid ou l'autre

J'avais bien compris mais merci ! C'est juste qu'au début, je n'avais pas fait attention que tu avais mis les 2 fichiers en entrée de awk donc je pigeais pas.


Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#10 Le 18/07/2012, à 12:30

jedineofr

Re : [RESOLU] [AWK] chercher dans des quotes

Une grand MERCI à vous tous big_smile
J'ai testé ta solution Haleth, elle est simple et efficace. Mais je vais quand même jeter un oeil sur ta solution, credenhill wink

Encore merci wink


Ubuntu 8.04 LTS -> Ubuntu 8.10 -> Ubuntu 9.04 -> Ubuntu 9.10 -> Ubuntu 10.04 LTS -> Lubuntu 14.04 > Ubuntu 14.04 > Ubuntu 16.04 LTS > Ubuntu 18.04 LTS
Asus ROG G551JW-DM379T (i7 4750HQ, GTX960M, Dd 1 To + SSD 24 Go, Windows 10 + Ubuntu)

Hors ligne