1 pièce(s) jointe(s)
trier et classer sur un tableau
Bonjour.
Quand je lance la script j'ai actuellement ça :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| ./test.ksh -s
mois DTU_SUPP_LOT_TABLE_FORMAT. type de DT : 0
mois BD0032. type de DT : 0
mois BD0020. type de DT : 0
mois DTR_MAJ_FORMAT_FACTURE. type de DT : 0
mois 11 type de DT : DTI 11
mois BD0043. type de DT : 0
mois BD0023. type de DT : 0
mois 11 type de DT : DTR 3
mois BD0013. type de DT : 0
mois BD0001. type de DT : 0
mois DTR_DEVERROU_CPTE. type de DT : 0
mois BD0062. type de DT : 0
mois DTR_MAJ_STATUS_CPT. type de DT : 0 |
le script :
Code:
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 66 67 68 69 70 71 72 73 74 75
| $ vi ./test.ksh
"./b1.ksh" 73 lines, 1340 characters
#!/bin/ksh
USAGE=${USAGE:-"mois=<mm> [filtre=<DTI|DTR>]"}
fct_usage ()
{
echo "$USAGE "
exit 1
}
# Selection des options sur la ligne de commande
[ "$(echo "$1"|cut -c1-2)" != "-s" ] && echo "$(basename $0) -s[tart] $USAGE" && exit 1
shift && while [ $# -gt 0 ]
do
[ $(echo $1|grep -c "=" ) = 0 ] && break
eval export $(echo $1|sed -e 's/=/="/' -e 's/$/"/')
shift
done
[ -n "$debug" ] && PS4='$LINENO '${ps4:-'>'}' ' && set -x
fct_trait ()
{
#echo traitement de $1
zgrep "${lfiltre}_" $1 |awk ' $0 ~ "Lancement" {
nb += 1
print "___",$(NF)
#ZZ[$(NF)]++
#print $NF
}
END {
if (nb != 0)
{
# for (k in ZZ )
# print k"a ete lance" ZZ[k] "fois"
printf ("mois %s : Nombre de %s trouves %d \n","'${m}'","'${lfiltre}'",nb)
}
}'
}
filtre=${filtre:-"DTI DTR"}
fct_mois ()
{
for m in $mois
do
for lfiltre in $filtre
do
#si mois courant , on inclut la felog
for k in $([ ! -n "$jour" ] && ls /toto/titi.${m}*) $([ $m = $(date '+%m') ] && echo $FE_LOG)
#for k in $([ ! -n "$jour" ] && ls /toto/titi.${m}*) $([ $m = $(date) ] && echo $LOF_LOG)
do
fct_trait $k
done
done
done
}
[ $# -eq 0 -a "$mois" = "" ] && jour=y
[ -n "$jour" ] && mois=$(date '+%m')
#fct_mois
fct_somme ()
{
fct_mois | awk '{
tab["mois "$2" type de DT : "$6] += $8
}
END {
for (k in tab)
print k , tab[k]
}'
}
fct_somme |
Je voudrais avoir comme ça :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| ./test.ksh -s
mois 11 type de DT : DTI 11
BD0032
BD0020
BD0043.
BD0023.
BD0013.
BD0001.
BD006
DTU_SUPP_LOT_TABLE_FORMAT
mois 11 type de DT : DTR 3
DTR_DEVERROU_CPTE
DTR_MAJ_FORMAT_FACTURE
DTR_MAJ_STATUS_CPT |
Merci d'avance.
awk seul avec des tableaux associatifs
Voici un exemple de ce qui pourrait être fait en utilisant des tableaux associatifs, et un semblant de multidimension, mais que tu devrais pouvoir facilement adapter :
Code:
1 2 3 4
| 1;smth;foo bar baz
2;smth_else;foo1 bar1 baz1
2;smth;foo2 bar2 baz2
2;smth_else;foo3 bar3 baz3 |
Ce fichier est beaucoup plus simple, c'est juste pour l'exemple
Code:
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
| #!/usr/bin/awk -f
BEGIN{
FS=";"
SUBSEP=":"
}
{
var_nb = $1; var_sm = $2
matchD[var_nb]++
matchT[var_nb,var_sm]++
if(content[var_nb,var_sm]){ content[var_nb,var_sm] = content[var_nb,var_sm]"\n"$3 }else{ content[var_nb,var_sm] = $3 }
}
END{
for(d in matchD){
print d": "matchD[d]
for(t in matchT){
if( t ~ "^"d":" ){
split(t,a,":")
print a[2]": "matchT[t]
for(c in content){
if ( c ~ "^"t"$"){
print content[c]
}
}
}
}
}
} |
Ce script ne cherche pas de correspondances, il faudra que tu les ajoutes
Code:
1 2 3 4 5 6 7 8 9
| 1: 1
smth: 1
foo bar baz
2: 3
smth_else: 2
foo1 bar1 baz1
foo3 bar3 baz3
smth: 1
foo2 bar2 baz2 |
il suffit d'étendre le principe de ce script à tes besoins.