J’ai une collection de fichiers tels que
fa_1_se-1.xml fa_1_se-2.xml fa_1_se-3.xml fa_1_se-10.xml fa_2_se-1.xml fa_2_se-2.xml fa_2_se-12.xml
où le nombre après le trait de soulignement indique le person_id et le nombre après le trait d’union est le record_id.
J’essaie de les sortinger par person_id en premier et ensuite record_id sans succès.
ls | sort -t- -k2
ls | sort -t- -k2
donne
f_a_1_se-1.xml f_a_2_se-1.xml f_a_1_se-10.xml f_a_2_se-12.xml f_a_1_se-2.xml f_a_2_se-2.xml f_a_1_se-3.xml
Comment puis-je le faire sortinger par person_id puis record_id?
Merci!
Vous pouvez utiliser l’option --stable
:
sort --stable -t_ -nk2 file fa_1_se-1.xml fa_1_se-2.xml fa_1_se-3.xml fa_1_se-10.xml fa_2_se-1.xml fa_2_se-2.xml fa_2_se-12.xml
MODIFIER:
Vous pouvez également essayer:
printf "%s\n" fa* | tr '-' '_' | sort -t_ -nk2 -nk4 | sed 's/_\([^_]*\)$/-\1/'
Pour les données qui ne sont pas présélectionnées de quelque manière que ce soit, une méthode est un sorting d’étiquette, sortingée par balises:
awk -F '[_-\.]' '{print $2, $4, $0}' filename | sort -k1n -k2n | awk '{print $3}'
où nom de fichier a une liste. La réponse de @anubhava semble correcte pour moi. Cet exemple n’est qu’un complément.