[GAWK] inclusion de données à 1 position X

Résolu
SAW5 Messages postés 43 Date d'inscription   Statut Membre -  
SAW5 Messages postés 43 Date d'inscription   Statut Membre -
Bonjour,

Bonjour tout le monde, j'ai un fichier qui est mis à jour régulièrement,

il a cette allure:
Jean
Michel
Fred
Sam
Bill


j'essaye d'introduire dans ce fichier ce bloc:

Vincent
Seb
Felix


sous le nom de l'utilisateur "Michel" le fichier au final doit avoir cette forme:

Jean
Michel
Vincent
Seb
Felix
Fred
Sam
Bill


==> Le gros du problème c'est que la position de Michel peux varier d'un fichier à un autre
==> aussi il peut y avoir plusieurs "Michel" dans le fichier des "users": exemple:


Michel
Jean
Michel
Fred
Sam
Bill
Michel
Bill
Michel


dans ce prototype le resultat doit être:

Michel
Vincent
Seb
Felix
Jean
Michel
Fred
Sam
Bill
Michel
Bill
Michel


c-à-d inclusion des données sous le 1er "Michel"

mon problème doit être resolus par le biais de GAWK "Gnu AWK de win"

je suis novice en GAWK mais j'essaye, et re..mais sans reussite:

voici mon "code" :

/^Michel/{
 print $0
}
END {
 print "Vincent"
 print "Seb"
 print "Felix"
 print $0
}

mais ça marche "presque" à moitié
merci @vous tous
--

----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"

9 réponses

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

    Tu dois absolument arriver à tes fins via GAWK ?

    Sans vouloir dénigrer "awk", ce n'est pas l'outil idéal pour ce genre d'opération (bien que je suis sûr que l'ami dubcek va nous pondre la syntaxe adéquate), mais un outil tel que "sed" me semble beaucoup plus adapté dans ce cas là...
    jp@MDK:~/tmpfs ssh$ cat fic
    Michel
    Jean
    Michel
    Fred
    Sam
    Bill
    Michel
    Bill
    Michel
    
    jp@MDK:~/tmpfs ssh$ sed '0,/Michel/ {
    s//&\
    Vincent\
    Seb\
    Felix/
    }
    ' fic
    
    Michel
    Vincent
    Seb
    Felix
    Jean
    Michel
    Fred
    Sam
    Bill
    Michel
    Bill
    Michel
    
    jp@MDK:~/tmpfs ssh$
    ;-))
    0
  2. SAW5 Messages postés 43 Date d'inscription   Statut Membre 7
     
    j'ai pas tester ton code mais sûrement ça va donner le bon resultat...merci beaucoup jipicy de ton code....en attendant un script avec awk..

    merci encore jipicy
    0
  3. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    La même chose sous Windows :
    C:\tmp>type fic.txt
    Michel
    Jean
    Michel
    Fred
    Sam
    Bill
    Michel
    Bill
    Michel
    
    C:\tmp>type sed.txt
    0,/Michel/ {
    s//&\
    Vincent\
    Seb\
    Felix/
    }
    
    
    C:\tmp>sed -f sed.txt fic.txt
    Michel
    Vincent
    Seb
    Felix
    Jean
    Michel
    Fred
    Sam
    Bill
    Michel
    Bill
    Michel
    
    C:\tmp>
    0
  4. SAW5 Messages postés 43 Date d'inscription   Statut Membre 7
     
    j'ai changer un peu ton script jipicy :

    C:\>type jipicy.bat
    C:\>sed "0,/Michel/ {s//&\Vincent\Seb\Felix/}" fic
    
    MichelVincentSebFelix
    Jean
    Michel
    Fred
    Sam
    Bill
    Michel
    Bill
    Michel


    en :

    C:\>type jipicy.bat
    C:\>sed "0,/Michel/ {s//&\n\Vincent\n\Seb\n\Felix/}" fic.txt
    Michel
    Vincent
    Seb
    Felix
    Jean
    Michel
    Fred
    Sam
    Bill
    Michel
    Bill
    Michel


    apparemment c'est un problème d'intérprétation de la commande SED par les 2 OS

    EDIT: nos 2 posts se sont croisés ;)
    la version Win de ton 2 eme code est IMPEC merci encore
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    hello
    $ ver
    Microsoft Windows XP [version 5.1.2600]
    
    $ type f1.txt
    Michel
    Jean
    Michel
    Fred
    Sam
    Bill
    Michel
    Bill
    Michel
    
    $ type f2.txt
    Vincent
    Seb
    Felix
    
    $ gawk "{print $0} ; /^Michel/ && !x {system(\"type f2.txt\");x=1 }" < f1.txt
    Michel
    Vincent
    Seb
    Felix
    Jean
    Michel
    Fred
    Sam
    Bill
    Michel
    Bill
    Michel
    
    0
  7. SAW5 Messages postés 43 Date d'inscription   Statut Membre 7
     
    enfin je vois ma fonction system() 8)

    merci dubcek

    si tu as du temps peux tu me dire que signifie ceci: "!x" (different de ?)
    0
  8. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    pour ne faire l'ajout du fichier f2.txt qu'une seule fois et sachant qu'une variable est par défaut à zéro, /^Michel/ && !x signifie la ligne commence par Michel ET la négation de x est vraie donc x est égal à zéro alors j'ajoute le fichier et j'assigne x=1 donc les prochaines lignes qui commencent par Michel ne seront plus traitées
    0
  9. SAW5 Messages postés 43 Date d'inscription   Statut Membre 7
     
    merci dubcek c'est gentil de ta part
    0