GAWK et extraire des données recursivement

Résolu/Fermé
SAW5 Messages postés 111 Date d'inscription vendredi 14 novembre 2008 Statut Membre Dernière intervention 6 janvier 2010 - 26 juil. 2009 à 17:25
SAW5 Messages postés 111 Date d'inscription vendredi 14 novembre 2008 Statut Membre Dernière intervention 6 janvier 2010 - 27 juil. 2009 à 18:03
Bonjour,

j'ai un problème avec l'utilitaire GAWK :

comment extraire de plusieurs fichiers txt un bloc de chaîne variant d'un fichier à un autre mais se trouvent tous à la 5eme ligne jusqu'a la ligne 9
exemple

-fic1.txt
...
32453254wdf35454sdf <- ligne n 5
qsfwdg645645645354
dwg454554654
dwgdgx6546545 <- ligne n 10
....
fic2
..
jkluhfqdulidfqs554df <- ligne n 5
fkhdf54636354654fsd
fuihdf54654645sfd
fsdoijdf646464d <- ligne n 10
....

je dois faire ce traitement sous GAWK pour win32

MERCI
A voir également:

7 réponses

jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
26 juil. 2009 à 17:51
Salut,

Avec "sed" ça ne t'intéresse pas ?

Merci de retirer la pub de ta signature à l'avenir !
0
dubcek Messages postés 18765 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 20 février 2025 5 625
26 juil. 2009 à 17:53
hello
du DOS, les puristes vont hurler :-)
$ cat f1.txt
1
2
3
4
32453254wdf35454sdf <- ligne n 5
qsfwdg645645645354
dwg454554654
888888
999999
dwgdgx6546545 <- ligne n 10
11
12
13
$ cat  f2.txt
1
2
3
4
jkluhfqdulidfqs554df <- ligne n 5
fkhdf54636354654fsd
fuihdf54654645sfd
88888
999999
fsdoijdf646464d <- ligne n 10
11
12
$ echo off
for %f in (f1.txt f2.txt) do  gawk "NR >= 5 && NR <= 10 {print $0}" %f 
32453254wdf35454sdf <- ligne n 5
qsfwdg645645645354
dwg454554654
888888
999999
dwgdgx6546545 <- ligne n 10
jkluhfqdulidfqs554df <- ligne n 5
fkhdf54636354654fsd
fuihdf54654645sfd
88888
999999
fsdoijdf646464d <- ligne n 10
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
26 juil. 2009 à 17:56
sed -ns '6,9p' fich*
;-))
0
SAW5 Messages postés 111 Date d'inscription vendredi 14 novembre 2008 Statut Membre Dernière intervention 6 janvier 2010 7
26 juil. 2009 à 18:37
merci beaucoup pour tous .. mon 1er code était

BEGIN{
 var=system("dir/a-d/b *.txt")
 print var
}


quels changement dois-je faire pour qu'il fonctionne ? avec la fonction system()

merci encore
0
dubcek Messages postés 18765 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 20 février 2025 5 625
27 juil. 2009 à 08:36
je pense qu'il vaut mieux exécuter une boucle extérieure pour trouver les fichiers. Une fois les fichiers trouvés il faudrait, à l'intéreur de gawk les ouvrir et les traiter, perl serait plus adapté.

for /f "tokens=*" %f in ('dir /a-d /b *.txt') do <gawk ou sed pour traiter les fichiers trouvés>

sinon, system() ne retourne pas le résultat de la commande, mais son status de fin. pour récupérer des noms de fichiers dans un tableau x, il faudrait faire:
gawk "BEGIN{n=0;while(\"dir /a-d /b *.txt\"|getline){x[n++]=$0;print $0}}"<NUL
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
SAW5 Messages postés 111 Date d'inscription vendredi 14 novembre 2008 Statut Membre Dernière intervention 6 janvier 2010 7
27 juil. 2009 à 11:34
bonjour et merci encore dubcek,

En Perl "hybride-inline" ça doit donner une chose du genre:
for %a in (*.txt) do perl -ne "print if($. >= 5 && $. <=9)" "%a"



gawk "BEGIN{n=0;while(\"dir /a-d /b *.txt\"|getline){x[n++]=$0;print $0}}"<NUL


merci pour le code, peux-tu m'expliquer brièvement les syntaxes utiliser, car le help de GAWK

GAWK --help lui même doit avoir un help..on ne comprends rien il n'y a pas d'exemples...merci encore

et quel est la différence avec:

gawk "BEGIN{system(\"dir/b/a-d *.txt\");print var}"


j'ai pas compris la différence entre "resultat" d'une commande et son "status" ?

Qui sait peut être que ce POST devienne une réference plus tard..on ne sait jamais ;)

merci et @+
0
dubcek Messages postés 18765 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 20 février 2025 5 625
27 juil. 2009 à 13:52
toutes les commandes, DOS ou Linux retournent un status, errorlevel en DOS, $? en shell Linux, en général 0 pas de problème, 1 (ou plus) il y a eu un problème, ex. en DOS:
$ dir zzzz
Fichier introuvable
$ echo %errorlevel%
1
$ dir /b f1.txt
f1.txt
$ echo %errorlevel%
0

gawk "BEGIN{n=0;while(\"dir /a-d /b *.txt\"|getline){x[n++]=$0;print $0}}"<NUL
f1.txt
f2.txt

ce code affiche et stocke le nom de chaque fichier dans un tableau appellé x pour un traitement ultérieur dans gawk, ici on n'en fait rien

 gawk "BEGIN{var=system(\"dir/b/a-d *.txt\");print var}"
f1.txt
f2.txt
0

ce code affiche le résultat de la comande dir et le status qu'elle retourne, 0 donc ok
0
SAW5 Messages postés 111 Date d'inscription vendredi 14 novembre 2008 Statut Membre Dernière intervention 6 janvier 2010 7
27 juil. 2009 à 18:03
merci dubcek du retour et de ta contribution fort précieuse
0