Ce qui est assez coûteux, c'est le double accès sur les données :
1er par awk
2ème par "while read"
awk -F"?" '{ print $1,$2,$3,$3,$4,$5,$6 }' $Nom | while read -r Bloc1 Col6 Col7 Coll8 Col9 Col10 Bloc2
Solution tout en awk qui devrait être plus rapide
http://www.shellunix.com/awk.html
http://lea-linux.org/cached/index/Dev-awk.html
http://pwet.fr/man/linux/commandes/posix/awk
Obs : ${Col4} et ${Col5} utilisées et pas déclarées...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
|
Nom1="fichier1.out"
Nom2="fichier2.out"
#Concatenation des 2 fichiers en entrée pour réaliser une boucle de traitement
Liste="${Nom1} ${Nom2}"
awk -F"?" -v AAAA=$(date +%H%S) -v script=$(basename $0) '
function writeCorps()
{
#Structure du corps en sortie
# A adapter !!!!!!!!!!
print $1";"$4";"$5";"$2";" > NomFicSortie
}
BEGIN {
IdPrec=""
MPrec=""
APrec=""
}
#------------------------------------------------------------#
# PROCEDURE PRINCIPALE #
#------------------------------------------------------------#
{
if (FILENAME != FILEprec) {
print ""
TimeStamp="'$(date +%d/%m/%Y_%H:%M)'"
print "Traitement de "FILENAME" Debut "TimeStamp
print ""
FILEprec=FILENAME
}
if ($1 == IdPrec && $2 == MBrec && $3 == APrec) {
# Bloc1 Col6 Col7 Coll8 Col9 Col10 Bloc2
writeCorps()
next #-- on passe à l enregisrement suivant
}
#
### Changement de fichier de sortie
#
if ($1 == IdPrec) {
Num=1
} else {
Num++
}
IdPrec=$1
MPrec=$2
APrec=$3
NomFicSortie=$1""$2""$3"XXX.txt"
TimeStamp="'$(date +%d/%m/%Y_%H:%M)'"
print "XXX;YYYY"Num"AAAA;ZZZZ;"TimeStamp";"$4" 6:00-"$5" 6:00;BBBB;"$6";AAA;" > NomFicSortie
writeCorps()
}
#------------------------------------------------------------#
# FIN PROCEDURE PRINCIPALE #
#------------------------------------------------------------#
END {
print ""
TimeStamp="'$(date +%d/%m/%Y_%H:%M)'"
print "Execution "script" terminee at "TimeStamp" pour "NR" lignes"
print ""
} ' $Liste
exit 0 |
Partager