Come posso inserire un elenco di articoli con una larghezza minima?


7

Come si colonnare qualsiasi input lsnon compilato come fa?

ls sta creando una tabella ottimizzata con larghezza minima per ogni riga, ad esempio:

ls

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

ma se columninserisco l' output in (ad es. ogni file su una riga), riempie ogni riga della stessa larghezza, quindi si adatta alla larghezza dello schermo:

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

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

(Uso solo l'elenco dei file qui per generare lo stesso output dell'esempio, sto cercando una soluzione del genere per mettere in risalto altre cose alla fine.)

Come posso colunnizzare qualsiasi output con una larghezza col variabile?


Va bene, una lettura alternativa della tua richiesta, se capisco correttamente i tuoi commenti, sarebbe "concatenare l'input come fa column -c_ n-x`, ma adattare l'output nel minor numero di colonne dello schermo possibile anziché riempire la larghezza specificata". È corretto?
jill,

sì quasi: inoltre dovrebbero esserci quante più colonne possibili che si adattano allo schermo. (come lo lsgestisce). Forse troviamo la soluzione, se esaminiamo il codice sorgente del codice sorgente del lscomando in coreutils
rubo77

Risposte:


5

Grazie @ rubo77 per avermelo chiesto, è un ottimo esercizio. Per me è stato un errore off-one-one ciò che l'inglese è Tough Stuff è un ritmo pasticciato: è stato divertente, veloce, anche se l'algoritmo stesso è piuttosto semplice.

[modifica finale: spostato su https://github.com/jthill/columnate/blob/master/columnate , bug corretto, implementato il maggiore di riga. ]


anche tu dovresti metterlo su github. Se è più veloce di ls-algorythm, forse puoi creare un ls-util più veloce?
rubo77,

@ rubo77 Devi dargli da mangiare la variabile COLONNE. vedere il commento "test con" nel codice. E quel 10x-20x è il contrario, è più lento, soprattutto perché è awk vs C.
jillill

time ls | sort | columnate COLUMNS=$COLUMNS
jillill

Sei un genio. Questo deve essere pubblicato per ogni distribuzione di Linux
rubo77

eh, grazie, davvero, ma è troppo forte. leggi il codice, è quasi forza bruta
jillill

3

Qualcosa di simile all'output di ls:

for i in *; do echo -en "${i}\t"; done; echo

bello, sta saltando solo in fila, se le linee di input variano di più di una scheda in larghezza. C'è un modo per impedire un'interruzione dell'output sul lato destro della finestra?
rubo77,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.