Je souhaiterais me mettre au awk, car on me dit que c'est plus performant qu'une succession de cut et sed.
mouais. S'il y a des invocations multiples de cut et sed pour chaque ligne du fichier, forcément, awk risque d'être plus rapide. Mais si les cut et sed sont factorisables pour avoir une seule invocation de cut et sed pour traiter l'intégralité du ficher, c'est beaucoup moins sûr.
Pour ma part, si je dois choisir entre awk et sed, ce n'est pas sur le critère performance, mais plutôt sur le type de traitement. Quand il faut traiter du flux, j'utilise quasiment toujours sed/cut. awk permet plus facilement d'ajouter des traitements globaux dans le bloc END, ou d'appliquer des traitements sur des blocs multilignes (mais c'est possible de faire des trucs de ouf en sed). Sachant qu'en vrai, si je dois effectuer un traitement suffisamment complexe pour nécessiter un bloc END, je vais assez rapidement basculer sur un langage de script plus évolué (genre Python).
Cela dit, se frotter à des langages qu'on ne connait pas, c'est jamais du temps perdu.
Par rapport à ta question, pourrais-tu donner une "vraie" ligne d'exemple (par exemple en n'anonymisant que le nom de domaine et l'IP) ? (Pourquoi remplacer des valeurs numériques par "tempschargementenchiffres" ou rescode ?).
Et peux-tu également mettre la ligne que tu cherches à obtenir après traitement ? En appliquant ton traitement chez moi (sed puis awk), dans la ligne que j'obtiens, le contenu des champs ne collent pas à leur titre, du coup, je sais que ce que j'obtiens ne correspond pas à ce que tu attends (et donc je ne sais pas exactement ce que tu attends).
Je ne sais pas en awk créer un fichier temporaire de travail, et le réutiliser pour enchainer une nouvelle commande.
Ou alors utiliser le | pour enchainer des commandes ? Mais on travaille en mémoire non ? Ca risque de saturer.
oui, c'est bien le rôle de | d'enchaîner des commandes. Il me semble que awk n'a pas besoin de charger tout le ficher. Il travaille en flux (dés qu'il peut traiter un bloc - ici, une ligne - il le fait). Dans ton traitement, tu alloues des variables locales de type simple, réutilisées à chaque ligne, du coup, la consommation mémoire ne devrait pas dépendre de la taille du fichier. Je ne vois pas de problème de ce côté là.
ps: à la relecture, je me rends compte que depuis le temps que je lis linuxfr, j'ai tendance à vite rentrer dans le vif du sujet, ambiance "comme à la maison". Ne t'en formalise pas trop et bienvenue !
# awk ou pas awk, c'est la question
Posté par gaaaaaAab . En réponse au message awk : imbrications de commandes. Évalué à 2.
mouais. S'il y a des invocations multiples de cut et sed pour chaque ligne du fichier, forcément, awk risque d'être plus rapide. Mais si les cut et sed sont factorisables pour avoir une seule invocation de cut et sed pour traiter l'intégralité du ficher, c'est beaucoup moins sûr.
Pour ma part, si je dois choisir entre awk et sed, ce n'est pas sur le critère performance, mais plutôt sur le type de traitement. Quand il faut traiter du flux, j'utilise quasiment toujours sed/cut. awk permet plus facilement d'ajouter des traitements globaux dans le bloc END, ou d'appliquer des traitements sur des blocs multilignes (mais c'est possible de faire des trucs de ouf en sed). Sachant qu'en vrai, si je dois effectuer un traitement suffisamment complexe pour nécessiter un bloc END, je vais assez rapidement basculer sur un langage de script plus évolué (genre Python).
Cela dit, se frotter à des langages qu'on ne connait pas, c'est jamais du temps perdu.
Par rapport à ta question, pourrais-tu donner une "vraie" ligne d'exemple (par exemple en n'anonymisant que le nom de domaine et l'IP) ? (Pourquoi remplacer des valeurs numériques par "tempschargementenchiffres" ou rescode ?).
Et peux-tu également mettre la ligne que tu cherches à obtenir après traitement ? En appliquant ton traitement chez moi (sed puis awk), dans la ligne que j'obtiens, le contenu des champs ne collent pas à leur titre, du coup, je sais que ce que j'obtiens ne correspond pas à ce que tu attends (et donc je ne sais pas exactement ce que tu attends).
oui, c'est bien le rôle de | d'enchaîner des commandes. Il me semble que awk n'a pas besoin de charger tout le ficher. Il travaille en flux (dés qu'il peut traiter un bloc - ici, une ligne - il le fait). Dans ton traitement, tu alloues des variables locales de type simple, réutilisées à chaque ligne, du coup, la consommation mémoire ne devrait pas dépendre de la taille du fichier. Je ne vois pas de problème de ce côté là.
ps: à la relecture, je me rends compte que depuis le temps que je lis linuxfr, j'ai tendance à vite rentrer dans le vif du sujet, ambiance "comme à la maison". Ne t'en formalise pas trop et bienvenue !