¿Cómo hago una columna de una lista de artículos con un ancho mínimo?

7

¿Cómo puedo columnastear cualquier entrada lsno acumulada como hace?

ls está creando una tabla optimizada con un ancho mínimo para cada fila, por ejemplo:

ls

2  dsao  file with space  with
5  e     g                wsdl-rubo-6cb0f1a9086e80c
d  file   leading space

pero si introduzco la salida en column(por ejemplo, cada archivo en una línea), rellena cada fila del mismo ancho, por lo que se ajusta al ancho de la pantalla:

for i in *; do echo "$i"; done | column

2                               file with space                          
5                               g                                        
d                                leading space                           
dsao                            with                                     
e                               wsdl-rubo-6cb0f1a9086e80c                
file

(Utilizo solo la lista de archivos aquí para generar el mismo resultado que en el ejemplo, estoy buscando una solución para columnatizar otras cosas al final).

¿Cómo puedo colunnizar cualquier salida con un ancho de col variable?

rubo77
fuente
De acuerdo, una lectura alternativa de su solicitud, si entiendo sus comentarios correctamente, sería "columnatear la entrada como column -c_ n-x`, pero ajustar la salida en la menor cantidad posible de columnas de pantalla en lugar de llenar el ancho especificado". ¿Es esto correcto?
2013
sí, casi: además, debería haber tantas columnas como sea posible que quepan en la pantalla. (como lo lsmaneja). Tal vez encontremos la solución, si buscamos en el código fuente del código fuente del lscomando en coreutils
rubo77

Respuestas:

5

Gracias @ rubo77 por preguntar esto, es un gran ejercicio. Para mí fue a errores fuera de uno lo que el inglés es Tough Stuff es al ritmo fallido: se volvió divertido, rápido, a pesar de que el algoritmo aquí es bastante simple.

[edición final: se movió a https://github.com/jthill/columnate/blob/master/columnate , error corregido, se implementó la fila principal. ]

jthill
fuente
También deberías poner esto en Github. Si es más rápido que el algoritmo ls, ¿quizás pueda crear un ls-util más rápido?
rubo77
@ rubo77 Debe alimentarlo con la variable COLUMNAS. vea el comentario 'prueba con' en el código. Y ese 10x-20x es al revés, es más lento, principalmente porque es awk vs C.
hasta el
time ls | sort | columnate COLUMNS=$COLUMNS
2013
Eres un genio. Esto tiene que ser publicado para cada distribución de Linux
rubo77
eh, gracias, de verdad, pero eso es demasiado fuerte. lea el código, es casi fuerza bruta
hasta el
3

Algo cercano a la salida de ls:

for i in *; do echo -en "${i}\t"; done; echo
Radu Rădeanu
fuente
bueno, solo salta en fila, si las líneas de entrada varían en más de una pestaña de ancho. ¿Hay alguna manera de evitar una interrupción de la salida en el lado derecho de la ventana?
rubo77