2010-06-03 13 views
7

Quiero unir líneas de modo que las líneas fusionadas estén alineadas en el mismo límite. UNIX paste (1) hace esto bien cuando las líneas se encuentran en el mismo límite de tabulación, pero cuando las líneas difieren en tamaño (en el archivo en el que se combinan las líneas), el texto resulta incómodo.¿Cómo alinear columnas usando pegar (1)? o cómo hacer una tabla alineada fusionando líneas en el caparazón?

Ejemplo de pasta (1) que tiene el efecto deseado:

$ echo -e "a\nb\nccc\nd" | paste - - 
a  b 
ccc  d 

Ejemplo de pasta (1) con efecto no deseado:

$ echo -e "a\nb\ncccccccccccc\nd" | paste - - 
a  b 
cccccccccccc d 

Nota cómo la segunda columna no se alinea . Quiero que 'b' se alinee con 'd', lo que requiere una pestaña adicional. Desafortunadamente, creo que este es el límite para la utilidad de pegar, por lo que si alguien tiene alguna idea de cómo obtener el efecto deseado anteriormente, me encantaría escucharlo.

+0

Trate de usar [ 'printf'] (http://linux.die.net/man/1/printf) para imprimir sus datos en los campos de ancho fijo antes de pasarla a' paste' (asegúrese de que el campo sea tan largo como el valor más largo) – bta

Respuesta

9

Mira la columna utilidad ...

$ echo -e "a\nb\ncccccccccccc\nd" | paste - - | column -t 
a    b 
cccccccccccc d 
1

Puede usar el printf utility para crear resultados formateados, utilizando los mismos especificadores de formato que printf. Con los especificadores de formato, puede especificar un ancho de campo mínimo. Por ejemplo:

printf "%30s%30s\n" "Alpha" "Bravo" 
1

Ver la respuesta here una manera fácil de manejar esto cuando las líneas pueden tener espacios u otros caracteres que ya utilizan la pr comando. Por ejemplo:

pr -m -t -w 200 file1 file2 
Cuestiones relacionadas