2010-06-03 23 views
7

Je souhaite fusionner des lignes de sorte que les lignes fusionnées soient alignées sur la même limite. La pâte UNIX (1) le fait bien lorsque les lignes se rencontrent toutes à la même limite de tabulation, mais lorsque les lignes diffèrent en taille (dans le fichier dans lequel les lignes sont fusionnées), le texte en sort bizarre.Comment aligner des colonnes avec paste (1)? ou comment faire une table alignée fusionner des lignes dans le shell?

Exemple de pâte (1) qui a l'effet désiré:

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

Exemple de pâte (1) avec effet indésirable:

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

Notez comment la deuxième colonne ne sont pas alignées . Je veux que 'b' s'aligne avec 'd', ce qui nécessite un onglet supplémentaire. Malheureusement, je crois que c'est la limite pour l'utilité de la pâte, donc si quelqu'un a une idée de la façon d'obtenir l'effet désiré ci-dessus, j'aimerais l'entendre.

+0

Essayez d'utiliser [ 'printf'] (http://linux.die.net/man/1/printf) pour imprimer vos données dans les champs de largeur fixe avant de passer à' paste' (assurez-vous que le champ est aussi long que la valeur la plus longue) – bta

Répondre

9

Vérifiez la colonne utilitaire ...

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

Vous pouvez utiliser printf utility pour créer une sortie formatée, en utilisant les mêmes spécificateurs de format que printf. Avec les spécificateurs de format, vous pouvez spécifier une largeur de champ minimale. Par exemple:

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

Voir la réponse here un moyen facile à manipuler quand les lignes peuvent avoir des espaces ou d'autres caractères qui utilisent déjà la pr commande. Par exemple:

pr -m -t -w 200 file1 file2 
Questions connexes