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
/explexpl
/app/archive_envapp/archive_env
/helios2/env4thelios/env4t
Je veux obtenir:
/explexpl,/app/archive_envapp/archive_env,/helios2/env4thelios/env4t
Je fais:
$ sed 'N;s/\n/,/' nfs1
J'obtiens:
/explexpl,/app/archive_envapp/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...