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

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  Extraction de champ par awk

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Extraction de champ par awk

n°1430671
Philippe19​71
Posté le 24-08-2006 à 14:31:43  profilanswer
 

Bonjour!
 
J'ai un fichier qui contient plusieurs champ sans que j'en connaisse le nombre Fic1:
fzz,fzf,zffzfzfz,ethrthrgtfhrfh,...
 
J'aimerais prendre chaque champ et créer un nouveau fichier Fic2:
fzz
fzz
zffzfzfz
ethrthrgtfhrfh
...
 
J'ai essayé en ksh:
#!/bin/ksh
awk ' BEGIN{FS=":"}
{
for (i=1;i=<NF;i++)
  { print $i }
}
END{print"C est fini"} ' /tmp/Fic1
 
mais j'obtiens:
 syntax error The source line is 3.
 The error context is
                for >>>  (i=1;i=< <<< NF;i++)
 awk: The statement cannot be correctly parsed.
 The source line is 3.
 awk: The statement cannot be correctly parsed.
 The source line is 3.
 
Pourquoi?
Comment faire?
Merci!
 
Philippe


---------------
Dur de commencer le Shell...
mood
Publicité
Posté le 24-08-2006 à 14:31:43  profilanswer
 

n°1430687
Elmoricq
Modérateur
Posté le 24-08-2006 à 14:48:34  profilanswer
 

C'est <=, et non =<
 
 
( man awk )


Message édité par Elmoricq le 24-08-2006 à 14:48:48
n°1430942
Philippe19​71
Posté le 24-08-2006 à 18:46:45  profilanswer
 

Je te remercie!
 
(man thank you)


---------------
Dur de commencer le Shell...
n°1430945
Philippe19​71
Posté le 24-08-2006 à 18:53:43  profilanswer
 

J'ai mon fichier FIC1 en entré et le script suivant:
awk ' BEGIN{FS=","}
{
for (i=1;i<=NF;i++)
  { print $i }
}
END{print"C est fini"} ' FIC1
Le résultat me convient mais j'aimerais le mettre en sortie dans un fichier FIC2.
Comment faire?
Merci!


---------------
Dur de commencer le Shell...
n°1430961
betsamee
Asterisk Zeperyl
Posté le 24-08-2006 à 19:35:56  profilanswer
 

sh tonscript.sh > FIC2


Message édité par betsamee le 24-08-2006 à 19:36:35
n°1430962
Philippe19​71
Posté le 24-08-2006 à 19:40:20  profilanswer
 

D'accord mais si je souhaite créer le fichier FIC2 à l'intérieur du script?


---------------
Dur de commencer le Shell...
n°1431287
aigles
Posté le 25-08-2006 à 11:48:16  profilanswer
 

Philippe1971 a écrit :

D'accord mais si je souhaite créer le fichier FIC2 à l'intérieur du script?


Pour créer le fichier à l'intérieur du script :

awk ' BEGIN{FS=","}  
{  
for (i=1;i<=NF;i++)  
  { print $i }  
}  
END{print"C est fini"} ' FIC1  > FIC2


 
A essayer (non testé):

# Les séparateurs de champs en entrée (FS)
# et en sortie (OFS) sont redéfinis.
# Toutes les lignes en entrée (FIC1) sont lues,
# affichées et stockées dans FIC2
 
awk -v FS="," -v OFS="\n" '{ print }' FIC1 > FIC2


 
Jean-Pierre.

n°1431307
Philippe19​71
Posté le 25-08-2006 à 12:02:28  profilanswer
 

Pour le "fichier à l'intérieur du script" c'est bon: merci beaucoup.
Cela ne fonctionne pas pour la solution "awk"...
Par contre j'aimerais bien abuser de ta disponibilité pour un autre problème:
J'ai:
$ cat nfs1
/expl:/expl
/app/archive_env:/app/archive_env
/helios2/env4t:/helios/env4t
 
 
Je veux obtenir:
/expl:/expl,/app/archive_env:/app/archive_env,/helios2/env4t:/helios/env4t
 
Je fais:
$ sed 'N;s/\n/,/' nfs1
J'obtiens:
/expl:/expl,/app/archive_env:/app/archive_env
 
Pourquoi?
Comment faire?
 


---------------
Dur de commencer le Shell...
n°1431309
Elmoricq
Modérateur
Posté le 25-08-2006 à 12:05:21  profilanswer
 

Mets ton code entre des balises [fixed][/fixed], parce qu'on a du mal à le lire avec tous ces smilies. :o

n°1431312
Philippe19​71
Posté le 25-08-2006 à 12:06:59  profilanswer
 

Ah excuse: en fait à la place du smily il y a un ":"


---------------
Dur de commencer le Shell...
mood
Publicité
Posté le 25-08-2006 à 12:06:59  profilanswer
 

n°1431760
Sve@r
Posté le 26-08-2006 à 11:42:39  profilanswer
 

Philippe1971 a écrit :

Pour le "fichier à l'intérieur du script" c'est bon: merci beaucoup.
Cela ne fonctionne pas pour la solution "awk"...
Par contre j'aimerais bien abuser de ta disponibilité pour un autre problème:
J'ai:
$ cat nfs1
/expl:/expl
/app/archive_env:/app/archive_env
/helios2/env4t:/helios/env4t
 
 
Je veux obtenir:
/expl:/expl,/app/archive_env:/app/archive_env,/helios2/env4t:/helios/env4t
 
Je fais:
$ sed 'N;s/\n/,/' nfs1
J'obtiens:
/expl:/expl,/app/archive_env:/app/archive_env
 
Pourquoi?
Comment faire?


http://forum.hardware.fr/hardwaref [...] -1.htm#bas

n°1431772
Elmoricq
Modérateur
Posté le 26-08-2006 à 12:14:24  profilanswer
 

(ah, et pour répondre à la question : il faut utiliser le modificateur /g à sed, sinon il n'exécute le pattern qu'une seule fois : sed 'N;s/\n/,/g' nfs1  )


Message édité par Elmoricq le 26-08-2006 à 12:15:00
n°1431783
aigles
Posté le 26-08-2006 à 12:26:43  profilanswer
 

Philippe1971 a écrit :

Pour le "fichier à l'intérieur du script" c'est bon: merci beaucoup.
Cela ne fonctionne pas pour la solution "awk"...


 
Il faut modifier un des champs pour forcer AWK à décomposer/reccomposer la ligne en utilisant OFS.  
En fait on fait semblant de modiier le champ $1 en lui concaténant une chaîne vide.
 
J'ai testé avec MAWK, et déjà utilisé la technique avec AWK (qui est nommé NAWK sur certains Unix) :

# Les séparateurs de champs en entrée (FS)  
# et en sortie (OFS) sont redéfinis.  
# Toutes les lignes en entrée (FIC1) sont lues.  
# On fait semblant de modifier $1 pour que AWK  
# recompose la ligne en utilisant OFS.
# Les lignes sont affichées et stockées dans FIC2  
 
awk -v FS="," -v OFS="\n" '{ $1=$1 " ";print $0}' FIC1 > FIC2


 
 
Jean-Pierre.


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

  Extraction de champ par awk

 

Sujets relatifs
champ ENUM ou VARCHAR ?champ textarea
Attribution valeur par defaut d'un champ text formulaire[SQL SERVER 05][SSIS] Pb insert champ date
Inserer une valeur d'une base de donnée dans un champ de texteMySQL - Accents dans un champ VARCHAR ?
[RESOLU][java] transformer un champ String en dateValeur par défaut qui se charge dans le champ texte
limitation champ feuille[MYSQL] extraction de champ ?
Plus de sujets relatifs à : Extraction de champ par awk


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