[GAWK] inclusion de données à 1 position X
Résolu
SAW5
Messages postés
122
Statut
Membre
-
SAW5 Messages postés 122 Statut Membre -
SAW5 Messages postés 122 Statut Membre -
Bonjour,
Bonjour tout le monde, j'ai un fichier qui est mis à jour régulièrement,
il a cette allure:
j'essaye d'introduire dans ce fichier ce bloc:
sous le nom de l'utilisateur "Michel" le fichier au final doit avoir cette forme:
==> 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:
dans ce prototype le resultat doit être:
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" :
mais ça marche "presque" à moitié
merci @vous tous
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
A voir également:
- [GAWK] inclusion de données à 1 position X
- Fuite données maif - Guide
- Site x - Guide
- Sites X : Pornhub, YouPorn et Redtube sont de nouveau accessibles en France - Guide
- Ma position - Guide
- Supprimer les données de navigation - Guide
9 réponses
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à...
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$;-))
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
merci encore jipicy
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>
j'ai changer un peu ton script jipicy :
en :
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Sous Windows les fins de ligne ne sont pas les même que sous Linux :
sed "0,/Michel/ {s//&\r\n\Vincent\r\n\Seb\r\n\Felix/}" fic.txtVoir Sed - Conversion retours chariots DOS (CRLF) / UNIX (LF)
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
enfin je vois ma fonction system() 8)
merci dubcek
si tu as du temps peux tu me dire que signifie ceci: "!x" (different de ?)
merci dubcek
si tu as du temps peux tu me dire que signifie ceci: "!x" (different de ?)
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