Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2329 connectés 

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  variables à base d'un fichier en input

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

variables à base d'un fichier en input

n°1818130
stmasnam
Posté le 28-11-2008 à 00:23:53  profilanswer
 

Salut à tous,
je dispose d'un fichier de data comme input, il contient trois colonnes de données, les trois valeurs de chaque ligne de ce fichier seront exploitées par la suite pour construire un fichier de commandes..
file_type:
06485 123456 11/09/08
06386 09856 08/01/07
.
.
.
etc
 
donc j'ouvre le file_type:
cat file_type| awk '/^[ 0-9]+$/{printf("object.modify,NBR=\"%s\",serial=\"%s\",DATE="$3 ";\n", $1,$2,$3)}' > commands
j'imagine que c'est pas correct..
 
le but est que mon fichier résultat (commands) soit rempli ainsi:
à partir de la 1ère ligne du fichier file_type par exple, il faudrait construire la commande suivante:
object.modify,NBR="06485",serial="123456",DATE="11/09/08";
idem pour la 2ème ligne du fichier file_type:
object.modify,NBR="06386",serial="09856",DATE="08/01/07";
 
le problème qui se pose à moi, est commment traduire ça et comment renseigner les $1,$2,$3...
 
Merci d'avance.

mood
Publicité
Posté le 28-11-2008 à 00:23:53  profilanswer
 

n°1818296
olivthill
Posté le 28-11-2008 à 12:00:33  profilanswer
 

Donc, c'est de l'Unix.
 
Renseigner $1, $2, $3... qui sont sur la ligne du awk ?
L'utilitaire awk découpe chaque ligne en plusieurs champs nommés $1, $2, etc.
Le découpage se base sur le sépateur de champ. Par défaut, c'est l'espace. Mais il est possible de changer ce séprateur.
Donc l'alimentation de $1, $2, $3 est automatiquement réalisée par awk si on lui fourni des lignes contenant des données séparées par un séparateur.
 
Je ne sais pas si cela vous aide. Sinon, pourriez-vous expliquer plus précisément où se situe le problème, si c'est un problème de conception de l'agorithme, ou si c'est le choix des outils Unix (awk ou cut, et cat ou autre), où si c'est la programmation ?

n°1818318
matafan
Posté le 28-11-2008 à 12:47:57  profilanswer
 
n°1818370
olivthill
Posté le 28-11-2008 à 14:12:56  profilanswer
 

Il semble que la solution n'ait pas été trouvée chez Developpez. Peut-être que les forumeurs seraient plus forts chez HFR.
 
Je propose :
 
1. Supprimer le cat qui ne sert à rien, car awk marche bien avec un fichier qui lui est passé normalement sans un cat et un pipe avant.
2. Supprimer le filtre au début de la commande awk qui a l'air de poser un problème. Si on veut filter, on peut le faire dans les accolades du awk, ce sera plus lisible, ou bien par un grep avant de donner le fichier à awk.
 
Donc, la solution serait :

awk
{
    printf("object.modify,NBR=\"%s\",serial=\"%s\",DATE="$3 ";\n", $1,$2,$3)
} ' file_type

n°1818690
matafan
Posté le 28-11-2008 à 18:07:33  profilanswer
 

olivthill a écrit :

1. Supprimer le cat qui ne sert à rien, car awk marche bien avec un fichier qui lui est passé normalement sans un cat et un pipe avant.


C'est une bonne remarque (mais pas liée au problème en question)

olivthill a écrit :

2. Supprimer le filtre au début de la commande awk qui a l'air de poser un problème. Si on veut filter, on peut le faire dans les accolades du awk, ce sera plus lisible, ou bien par un grep avant de donner le fichier à awk.


Alors ça par contre c'est un très mauvais conseil. Le filtrage est très bien où il est. C'est ainsi que awk est sensé fonctionner. Pour ce qui est du grep, ça me hérisse les poils quand je vois un grep avant un awk...

Message cité 1 fois
Message édité par matafan le 28-11-2008 à 18:07:58
n°1818728
stmasnam
Posté le 28-11-2008 à 19:44:30  profilanswer
 

olivthill a écrit :

Il semble que la solution n'ait pas été trouvée chez Developpez. Peut-être que les forumeurs seraient plus forts chez HFR.
 
Je propose :
 
1. Supprimer le cat qui ne sert à rien, car awk marche bien avec un fichier qui lui est passé normalement sans un cat et un pipe avant.
2. Supprimer le filtre au début de la commande awk qui a l'air de poser un problème. Si on veut filter, on peut le faire dans les accolades du awk, ce sera plus lisible, ou bien par un grep avant de donner le fichier à awk.
 
Donc, la solution serait :

awk
{
    printf("object.modify,NBR=\"%s\",serial=\"%s\",DATE="$3 ";\n", $1,$2,$3)
} ' file_type



 
1- quand j'éxécutais la commande indiquée dans mon premier message, le fichier commands reste vide...
2- je voulais renseigner un champ supplémentaire:
 
serv='test'
cat file_type| awk '/^[ 0-9]+$/{printf("object.modify,NBR=\"%s\",SERV=\"'${serv}'\",serial=\"%s\",DATE="$3 ";\n", $1,$2,$3)}' > commands
 
ERREUR ---> String in Line1
 
je comprends pas !
 
je vous remercie pour vos réponses
 
 

n°1818730
stmasnam
Posté le 28-11-2008 à 19:49:26  profilanswer
 

matafan a écrit :


C'est une bonne remarque (mais pas liée au problème en question)


 

matafan a écrit :


Alors ça par contre c'est un très mauvais conseil. Le filtrage est très bien où il est. C'est ainsi que awk est sensé fonctionner. Pour ce qui est du grep, ça me hérisse les poils quand je vois un grep avant un awk...


 
D'aprés matafan, le "/" dans la partie date risque de créer problème pour le matching...donc j'imagine la necessité de mettre un filtre...

n°1818731
matafan
Posté le 28-11-2008 à 19:52:13  profilanswer
 

stmasnam a écrit :

D'aprés matafan, le "/" dans la partie date risque de créer problème pour le matching...donc j'imagine la necessité de mettre un filtre...


:heink: Non pas du tout, où est-ce que j'ai dis ça ?

n°1818773
stmasnam
Posté le 28-11-2008 à 20:46:44  profilanswer
 

matafan a écrit :


:heink: Non pas du tout, où est-ce que j'ai dis ça ?


 
Ce que tu fais est correct, sauf que /^[ 0-9]+$/ ne va pas matcher puisque tu as des / dans ta ligne. Suivant ce que tu veux matcher, tu peux faire par exemple /^[ 0-9/]+$/, ou bien /^[ 0-9]+/...

n°1818864
matafan
Posté le 28-11-2008 à 22:32:14  profilanswer
 

Avec ton expression awk oui, pas avec la mienne. Le / dans la ligne n'est pas un problème, mais il faut juste que le filtre en tienne compte.

mood
Publicité
Posté le 28-11-2008 à 22:32:14  profilanswer
 

n°1818869
stmasnam
Posté le 28-11-2008 à 22:50:29  profilanswer
 

une ptite question pour DATE:
 
cat file_type| awk '/^[ 0-9]+$/{printf("object.modify,NBR=\"%s\",SERV=\"'${serv}'\",serial=\"%s\",DATE="$3 ";\n", $1,$2,$3)}' > commands  
 
ou bien
 
cat file_type| awk '/^[ 0-9]+$/{printf("object.modify,NBR=\"%s\",SERV=\"'${serv}'\",serial=\"%s\",DATE=\"%s\";\n", $1,$2,$3)}' > commands  
 

n°1819175
matafan
Posté le 29-11-2008 à 18:20:05  profilanswer
 

C'est comme tu veux, ça revient au même. Par contre tu n'as toujours pas compris que /^[ 0-9]+$/ ne match pas tes lignes...

n°1819256
stmasnam
Posté le 29-11-2008 à 21:18:49  profilanswer
 

si si g compris...ce que je n'ai pas compris par contre, est l'erreur que ca me retourne quand j'essaie ta proposition...


Message édité par stmasnam le 29-11-2008 à 21:20:09
n°1819316
matafan
Posté le 29-11-2008 à 23:23:22  profilanswer
 

Je t'ai déjà demandé la ligne de commade exacte que tu utilises et l'OS sous lequel tu tournes, mais apparement tu n'as pas vraiment envie qu'on t'aide, donc...


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Shell/Batch

  variables à base d'un fichier en input

 

Sujets relatifs
[Resolu] Détecter lorsque l'utilisateur n'a rien rentré dans un input?[ Resolu ] Faille de sécuirté, comment gérer les variables ?
Fichier Batch et commande FTPChanger le contenu d'un Input en Ajax
mettre en forme un fichierEst-il possible d'écrire dans un fichier xls sans l'ouvrir ?
Problème Ajax d'ouverture d'un fichier en attachementRenommer des fichiers grâce à une base de données
[C] Problème de lecture dans un fichier en C : fscanfVider input lors d'un rafraichissement [F5]
Plus de sujets relatifs à : variables à base d'un fichier en input


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR