Estos son los datos que quiero ordenar. Pero sort
trata 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 -V
harí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
,sort
ytr
parte luego en consecuencia.La tubería funciona de la siguiente manera: el
sed
comando inserta el centinela antes de cualquier número, elsort
comando interpreta al centinela como delimitador de campo, se ordena con el segundo campo como una clave de clasificación numérica y eltr
comando elimina el centinela nuevamente.Y
log
denota 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
-n
no 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 -V
No 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