Question sur awk (unix)

Bonjour,

je suis fasse au probleme suivant, j’ai un petit fichier de 3Go en entree que je veux spliter celon certain critere. A chaque rupture, je veux changer le nom de mon fichier en sortie. J’ai essayes divers trucs, cherche sur le net, mais rien trouve. En dernier recours je poste ici en priant…

le script a la tete suivante :

[code]REP=‹ /backup/WONT_DELETE/ama/TEST ›
tata=tata.ama
awk ’
BEGIN {account=0A; i=0; newfile=0;}

/RELEVE/{
i=0;
newfile=1;
}

{if(newfile==1){i++; tab[i]=$0;}}

/ [0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][A-Z][A-Z][A-Z] /{

	if($4!=account){
	  account=$4;
	  printf("TAAAGGGG %s\n",account);
	}

	for(j=1;j<=i;j++) { print tab[j]; }

	newfile=0;

}

{if(newfile==0){print $0;} }
’ $REP/toto >$REP/$tata

filename=tata.1

while read -r enreg
do
titi=$(echo $enreg|awk ‹ {print $1} ›)
if [[ « $titi » = « TAAAGGGG » ]] then
filename=tata.$(echo $enreg|awk ‹ {print $2} ›)

$filename
else
echo « $enreg » >>$filename
fi
done<$REP/$tata[/code]

En claire, j’aimerai integre ce que fait ma boucle while directement dans le awk (parceque un while read sur un fichier de 3 go… c’est « un peu » long), mais je n’arrive pas a changer le nom du fichier en sortie (meme en changeant $tata le awk conserve la valeur initial)

Aza.

Et avec la commande csplit, ça marche pas plus simplement?

man csplit pour plus d’info

Moi, j’ai pas compris le problème posé. J’aurais préféré un exemple simple plutot que du keude WIP…

[quote=“Duffy, post:2, topic: 30323”]Et avec la commande csplit, ça marche pas plus simplement?

man csplit pour plus d’info[/quote]
on a fait un test avec csplit, mais c’est encore beaucoup trop long (10 minute sur un fichier de 52Mo, donc sur 3Go…) alors que mon awk prends a peu pres 30-40 minutes sur le fichier de 3Go…

Vectra, desole je vois pas comment l’expliquer autrement.