Extraction de champ par awk - Shell/Batch - Programmation
Marsh Posté le 24-08-2006 à 14:48:34
C'est <=, et non =< 
 
 
( man awk )
Marsh Posté le 24-08-2006 à 18:46:45
Je te remercie! 
 
(man thank you)
Marsh Posté le 24-08-2006 à 18:53:43
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! 
Marsh Posté le 24-08-2006 à 19:35:56
sh tonscript.sh > FIC2
Marsh Posté le 24-08-2006 à 19:40:20
D'accord mais si je souhaite créer le fichier FIC2 à l'intérieur du script? 
Marsh Posté le 25-08-2006 à 11:48:16
| 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=","}   | 
 
 
A essayer (non testé): 
| # Les séparateurs de champs en entrée (FS)  | 
 
 
Jean-Pierre.
Marsh Posté le 25-08-2006 à 12:02:28
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
expl 
/app/archive_env app/archive_env
app/archive_env 
/helios2/env4t helios/env4t
helios/env4t 
 
  
Je veux obtenir: 
/expl expl,/app/archive_env
expl,/app/archive_env app/archive_env,/helios2/env4t
app/archive_env,/helios2/env4t helios/env4t
helios/env4t 
  
Je fais: 
$ sed 'N;s/\n/,/' nfs1 
J'obtiens: 
/expl expl,/app/archive_env
expl,/app/archive_env app/archive_env
app/archive_env 
 
Pourquoi? 
Comment faire? 
 
Marsh Posté le 25-08-2006 à 12:05:21
Mets ton code entre des balises [fixed][/fixed], parce qu'on a du mal à le lire avec tous ces smilies. 
Marsh Posté le 25-08-2006 à 12:06:59
Ah excuse: en fait à la place du smily il y a un ":"
Marsh Posté le 26-08-2006 à 11:42:39
| Philippe1971 a écrit : Pour le "fichier à l'intérieur du script" c'est bon: merci beaucoup.  | 
 
http://forum.hardware.fr/hardwaref [...] -1.htm#bas 
Marsh Posté le 26-08-2006 à 12:14:24
(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 )
Marsh Posté le 26-08-2006 à 12:26:43
| Philippe1971 a écrit : Pour le "fichier à l'intérieur du script" c'est bon: merci beaucoup.  | 
 
 
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)   | 
 
 
 
Jean-Pierre. 
Marsh Posté le 24-08-2006 à 14:31:43
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...