Estos son los datos que quiero ordenar. Pero sorttrata la cadena numérica, los datos no se ordenaron como esperaba.
/ home / files / profile1
/ home / files / profile10
/ home / files / profile11
/ home / files / profile12
/ home / files / profile14
/ home / files / profile15
/ home / files / profile16
/ home / files / profile2
/ home / files / profile3
/ home / files / profile4
/ home / files / profile5
/ home / files / profile6
/ home / files / profile7
/ home / files / profile8
/ home / files / profile9
Quiero ordenar esto,
/ home / files / profile1
/ home / files / profile2
/ home / files / profile3
/ home / files / profile4
/ home / files / profile5
/ home / files / profile6
/ home / files / profile7
/ home / files / profile8
/ home / files / profile9
/ home / files / profile10
/ home / files / profile11
/ home / files / profile12
/ home / files / profile14
/ home / files / profile15
/ home / files / profile16
¿Hay una buena manera de bash script? No puedo usar el script Ruby o Python aquí.
fuente

sort -Vharía.Respuestas:
Puede usar un carácter centinela temporal para delimitar el número:
Aquí, el personaje centinela es ';' - no debe ser parte de ningún nombre de archivo que desee ordenar, pero puede intercambiar ';' con cualquier personaje que te guste. Tienes que cambiar el
sed,sortytrparte luego en consecuencia.La tubería funciona de la siguiente manera: el
sedcomando inserta el centinela antes de cualquier número, elsortcomando interpreta al centinela como delimitador de campo, se ordena con el segundo campo como una clave de clasificación numérica y eltrcomando elimina el centinela nuevamente.Y
logdenota el archivo de entrada: también puede canalizar su entradased.fuente
Esto es muy similar a esta pregunta . El problema es que tiene un campo alfanumérico en el que está ordenando y
-nno lo trata con sensatez, sin embargo, la versión sort (-V) sí. Por lo tanto, use:Tenga en cuenta que esta característica actualmente es compatible con las implementaciones de ordenación GNU, FreeBSD y OpenBSD.
fuente
sort -VNo usarsort -v. Es difícil saberlo a primera vista.Si todos los nombres de archivo tienen el mismo prefijo antes de la parte numérica final, ignórelo al ordenar:
(20 es la posición del primer dígito. Es uno más la longitud de
/home/files/profile).Si tiene varias partes no numéricas diferentes, inserte un centinela .
fuente