GAWK et extraire des données recursivement

Résolu
SAW5 Messages postés 43 Date d'inscription   Statut Membre -  
SAW5 Messages postés 43 Date d'inscription   Statut Membre -
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

--
** (groups.google.com/group/batchers) **

----Mon Nouveau Moi ---------------
Configuration: un peu de tout quoi..du futur j'en est pris un IE 10..un Win 8 (c'est après le 7)..ah autre chose il n' y aura plus de clavier mais à la place une chose qui s'appelle la "trompe-de-saturne"

7 réponses

  1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Salut,

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

    Merci de retirer la pub de ta signature à l'avenir !
    0
  2. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    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
    1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      sed -ns '6,9p' fich*
      ;-))
      0
  3. SAW5 Messages postés 43 Date d'inscription   Statut Membre 7
     
    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
  4. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. SAW5 Messages postés 43 Date d'inscription   Statut Membre 7
     
    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
  7. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    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
  8. SAW5 Messages postés 43 Date d'inscription   Statut Membre 7
     
    merci dubcek du retour et de ta contribution fort précieuse
    0