ayé problème resoluto( mode manchot madagascar 2 ) en passant par awk et la fonction asort .J'avais déjà utiliser asort mais comme j'ai besoin de trier des lignes par rapport à un champ je ne savais pas comment faire pour garder la correspondance entre le trie sur un champ et la ligne (voir ici [
www.gnu.org] pour comprendre le problème auquel on est confronté avec asort) .
donc la solution est toute simple en fait . On concatène le champ sur le lequel on trie , avec une chaine de caractère de plusieurs dizaines d'espaces blancs puis la ligne derrière . J'utilise asort sur ces lignes bidouillées . puis à la fin j'extraits les lignes qui sont triées selon le champ .
Voici le code
a=$1
b=$2
echo $a
echo $b
awk -v fichier=$a -v colonne=$b ' BEGIN { FS=";"
chemin=gensub("^(.*)\\.(.*)$","\\1""a.""\\2",1,fichier)
print " debut mémorisation "
j=colonne
}
{ if(index($j,"\"") == 1){ champ=gensub("^\"(.*)\"$","\\1",1,$j) }
else{champ=$j}
tab[NR]=champ" "$0
lg=NR
}
END { print "fin mémorisation"
print "début trie "
asort(tab)
for(i=1;i<=lg;i++){
ligne=gensub("^(.*) (.*)$","\\2",1,tab)
printf(ligne"\n") >> chemin
}
print "fin trie"
} ' $a
Poste le Thursday 11 June 2009 10:57:18