je cherche à faire un truc un peu particulier... [awk] - Shell/Batch - Programmation
Marsh Posté le 05-02-2004 à 21:45:29
dans le END (apres le traitement ligne par ligne donc)
tu peux faire un traitement ds un while avec le numero de ligne ($i je crois)
et si le premier champ est identique au precedent c bon...
tu dois pouvoir obtenir le numero total de ligne (comme NF pour number of field)
j ai fait du awk y a longtemps mais je pense que comme ca c possible
Marsh Posté le 06-02-2004 à 09:44:35
je te remercie grandement !
je vais fouiller de ce côté là
avec ton aide et une bonne nuit de sommeil ça devrai aller
je vous tiens au courant
merci encore
Marsh Posté le 06-02-2004 à 09:53:05
Pourquoi tu fais pas ca en Perl??
Le jour ou j'ai decouvert Perl, il y a bien longtemps, j'ai definitivement arrete d'ecrire du awk.
A+,
Marsh Posté le 06-02-2004 à 09:59:16
bin j'ai touché perl qu'une fois pour faire un cgi ya 4 ans...
j'ai pas trop le temps de m'y remettre là
mais c'est quelque chose que j'envisage
merci gilou
Marsh Posté le 06-02-2004 à 10:33:39
Ceci devrait résoudre ton problème :
|
Marsh Posté le 06-02-2004 à 17:16:47
merci encore à vous, j'ai bien avancé, surtout grâce à l'idée de aigles
bien sûr ce que j'ai à faire est un poil + complexe que ce que montre mon exemple...
mais j'ai pu m'en sortir
maintenant je n'arrive pas à appeler une fonction plutôt qu'un print, mais on verra ça lundi hein
Marsh Posté le 06-02-2004 à 21:47:47
Juste un petit exemple de fonction :
[fixed]
awk -f';' '
function printToto() {
print $0
toto = 1
}
$1 == "toto" && ! toto { printToto() ; next}
$1 == "titi" { print $0 }
{ toto = 0 }
' mon-fichier > new-fichier
Marsh Posté le 09-02-2004 à 17:02:30
Citation : |
Attention tu es en train de mélanger 'awk' et 'shell'.
Tu ne peux pas intégrer une fonction shell dans un script awk.
Le plus simple est de rester au niveau shell, par exemple:
Code :
|
Si tu veux rester dans awk, tu dois mettre le code de ta fonction dans un fichier à part 'my_function.sh' par exemple, et tu y fais appel depuis awk par la fonction 'system'.
Marsh Posté le 05-02-2004 à 17:31:28
salut
je veux parcourir un fichier log
et faire ressortir certaines de ces lignes dans un autre fichier
avec grep et awk c'est tout à fait possible et tres simple
genre pour un fichier comme celui-ci :
pour avoir les lignes contenant toto ou titi, je fais
ou
jusque là tout va bien...
mais je voudrai pousser le truc un peu plus loin...
par exemple, ne pas récupérer une ligne contenant le mot "toto" si la ligne précédente contenait le mot "toto" et a déjà été récupérée...
je sais pas si je suis clair..
dans mon exemple, le fichier résultat ressemblerai à ceci :
je m'arrache les cheveux..
je ne sais même pas faire une simple boucle sur chaque ligne du fichier, mettre cette ligne dans une variable, et la comparer à la ligne suivante... ce serai peut-être la solution, mais je ne sais comment faire...
un grand merci et toute ma reconnaissance à celui ou celle qui me permettra d'avancer !
Message édité par ouf le 05-02-2004 à 17:42:29