Awk - Récupération de champ

Fermé
remousse Messages postés 299 Date d'inscription dimanche 2 novembre 2008 Statut Membre Dernière intervention 20 novembre 2014 - 21 janv. 2013 à 13:31
dubcek Messages postés 18757 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 19 décembre 2024 - 21 janv. 2013 à 14:57
Bonjour,

J'ai un fichier comme ceci :

numéro            : 25905                                
Prenom                      : toto                             
Duree          : 10                                     
Taille                      : 54121
Date                        : 25/02/1998       
                            :  
Commentaires


Je scanne ce fichier et ne récupère que la valeur du numéro, la durée, la taille et la date afin de construire un fichier csv comme ceci:
25905;10;54121;25/02/1998.

Aucun problème avec awk, sauf lorsque j'ai une durée nulle (Durée :), j'obtiens donc un csv comme cela : 25905;Durée:;54121;25/02/1998.

J'aimerai pouvoir avoir 25905;;54121;25/02/1998 à la place.

Voici une partie de mon code :

awk '
BEGIN {
	TopNbrBEGIN=0
	TopNbrTYPE=0
}
{
	if ($1 == "numéro")
	{
		printf("%s;",$NF)
		TopNbrBEGIN++
		while (getline > 0) {
			if ($1 == "Commentaires") {
				TopNbrTYPE=0
				next
			}
			if ($1 ~ /^Duree/) {
				printf("%s;",$NF) 
				continue
			}
			if ($1 ~ /^Taille/) {
				printf("%s;",$NF)
				continue
			}
			if ($1 ~ /^Date/) {
				printf("%s\n",$NF)
				continue
			}
		continue
		}
	}
} '  $file >> $filename.csv


Par avance merci.

1 réponse

dubcek Messages postés 18757 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 19 décembre 2024 5 623
21 janv. 2013 à 14:57
hello
en utilisant espace(s) : espace(s) comme séparateur
awk -F"[ ]*:[ ]*" -f code.awk fichier
25905;;54121;25/02/1998
0