Puedes usar sort
:
sort -k8,8 <<EOF
drwxr-sr-x 2 user group 4096 2018-02-19 14:11:42 /something/project/somefile
drwxr-sr-x 2 user group 4096 2018-02-19 00:14:50 /blah-blah/anything
-rw-r----- 1 someone users 2188 2018-07-21 13:52:59 /aaa/222
drwxr-S--- 2 someone users 4096 2018-06-25 14:27:42 /bbb/333/anything/whatever
-rw-r----- 1 someone users 715 2018-06-16 20:09:58 /xxx/aaa/666
EOF
-k
selecciona en qué campo ordenar, 8,8
dice ordenar los datos del campo 8 al campo 8.
Puede usar -t
para definir el separador de campo, aunque el valor predeterminado aquí está bien (transición de no vacío a blanco).
Salida:
-rw-r----- 1 someone users 2188 2018-07-21 13:52:59 /aaa/222
drwxr-S--- 2 someone users 4096 2018-06-25 14:27:42 /bbb/333/anything/whatever
drwxr-sr-x 2 user group 4096 2018-02-19 00:14:50 /blah-blah/anything
drwxr-sr-x 2 user group 4096 2018-02-19 14:11:42 /something/project/somefile
-rw-r----- 1 someone users 715 2018-06-16 20:09:58 /xxx/aaa/666
Para el seguimiento, usted preguntó:
Mi archivo que contiene la lista también tiene N líneas iniciales y M finales que no están en la forma de columna que se muestra arriba. Lamentablemente, la clasificación los arruina. ¿Cómo puedo excluir esas líneas y ordenar solo las columnas?
Necesitará saber cuántas líneas hay antes / dentro / después del bloque que se va a ordenar, y puede sustituir los valores utilizados a continuación con variables. Una tubería simple como se muestra a continuación puede funcionar bien.
Contenido de data.txt
:
Zline1
Zline2
drwxr-sr-x 2 user group 4096 2018-02-19 14:11:42 /something/project/somefile
drwxr-sr-x 2 user group 4096 2018-02-19 00:14:50 /blah-blah/anything
-rw-r----- 1 someone users 2188 2018-07-21 13:52:59 /aaa/222
drwxr-S--- 2 someone users 4096 2018-06-25 14:27:42 /bbb/333/anything/whatever
-rw-r----- 1 someone users 715 2018-06-16 20:09:58 /xxx/aaa/666
AlineN-1
AlineN
Tubería:
(head -n 2; head -n 5 | sort -k8,8; cat) < data.txt
Salida:
Zline1
Zline2
-rw-r----- 1 someone users 2188 2018-07-21 13:52:59 /aaa/222
drwxr-S--- 2 someone users 4096 2018-06-25 14:27:42 /bbb/333/anything/whatever
drwxr-sr-x 2 user group 4096 2018-02-19 00:14:50 /blah-blah/anything
drwxr-sr-x 2 user group 4096 2018-02-19 14:11:42 /something/project/somefile
-rw-r----- 1 someone users 715 2018-06-16 20:09:58 /xxx/aaa/666
AlineN-1
AlineN
(head -n <N>; tail -n +<N+1> | head -n -<M> | sort -s -k8,8; tail -n <M>) < data.txt
también funciona (sin tener que saber el número de líneas en el "medio"). DesafortunadamenteM
faltan las últimas líneas, así que tuve que hacerlo como una línea separada en el guión. Quizás si sabes cómo canalizarlo (ya que puedo estar equivocado) sería perfecto :) ¡Pero esto también funciona!tail
no funcionará, ya que tiene que leer la entrada completa para calcular cuántas líneas del final usar ... así que, en ese caso, la finaltail -n <M>
no se activastdin
, ¡porque la anterior lotail -n +<N+1>
ha tomado todo!