Je voulais afficher une longue liste de chaînes d'un tableau.
En ce moment, mon script traversait une boucle pour faire écho à chaque valeur à la sortie standard: p>
$ values=( 01----7 02----7 03-----8 04----7 05-----8 06-----8 07-----8 08-----8 09---6 10----7 11----7 12----7 13----7 14-----8 15-----8 16----7 17----7 18---6 19-----8 20-----8 21-----8)
7 Réponses :
Utilisez un onglet après chaque valeur. p>
(il coule automatiquement à la ligne suivante ...) p>
for value in ${values[@]} do echo -en "$value\t" done
Je suis sûr que vous voulez dire echo -en "$ valeur \ t" code>
Vous pouvez tuyer votre sortie à colonne code> Strong>
.
en utilisant colonne code> semble avoir du mal à une autre entrée dans une seule colonne étant plus étroite qu'un Tabstop (8 caractères). P>
printf code>
dans un pour code> -LOOP aux valeurs de pad à 8 caractères semble faire le truc: p>
+1 correct! Colonne Code> Pour la sortie Wise de colonne et
Column -x Code> pour la sortie Wise de ligne.
et @dennis: Nice! C'est exactement ce que je cherchais. Mais le résultat n'est pas parfait: en fonction de la longueur des cordes, il y a parfois des trous dans les colonnes. Il se sent comme il s'enclenche la taille des colonnes à une largeur (comme les onglets insérés entre les valeurs) mais ne prend pas soin de la plus grande valeur de valeur pour calculer la largeur globale de la colonne. La commande ls code> prend en charge ceci pour une sortie propre.
printf "% -8s \ n" "$ {valeur [@]}" | colonne code> fonctionne aussi.
Voici quelques techniques pouvant être utilisées avec johnsyweb's fort> réponse afin que vous puissiez faire votre sortie sans boucle: ou p> < Pré> xxx pré> ou p>
Agréable! Essayé les trois techniques, à peu près le même résultat. Voir mon commentaire sur la réponse de @ johnysweb.
@Arko: sans voir vos données, il est impossible de faire des suggestions supplémentaires. colonnes code> utilise des onglets et ajuste également le nombre de colonnes en fonction de la longueur de la chaîne la plus longue.
Mes données sont un tableau simple de chaînes, comme `valeurs = (un deux trois quatre cinq) '. J'ai dû manquer quelque chose. Aucun moyen d'obtenir une colonne correctement formatée. Mettra à jour la question avec plus d'informations à ce sujet.
@Abo: vos lignes de données sont parfaitement utiles à l'aide de la commande que vous avez fournie. Je n'ai pas pu reproduire exactement ce que votre capture d'écran montre, mais je me suis terminé en rétrécissant la fenêtre de mon terminal à 60 caractères de large et en émettant une commande onglets -10 code> avant d'émettre votre
echo ... colonne code> commande.
Je m'attendais à votre réponse. Le problème est spécifique à mon ordinateur. Je vais essayer de suivre pourquoi. En attendant, j'ai trouvé une autre "façon" de le faire ... voir ma propre réponse. ;)
Il peut sembler trop cher, mais je suis proposé ma propre solution. J'ai écrit un petit script qui fait exactement ce que je voulais: prenez une liste de valeurs et de les produire dans une vue colonne assez formatée. P>
Suggestions: Comparaison entière: si (($ {# valeur}> $ longest_value)) code> et d'autres personnes, vous utilisez
(()) code> ailleurs - vous pouvez aussi: < Code> ((colonnes = term_width / (longest_value + 2))) code> et
((((spaces_missing = longest_value - value_len + 2)) code>, au lieu d'écarts d'écho dans un
pour < / code> boucle:
printf "% * s" $ spaces_missing code>
@Dennis Williamson: changements commis! Je savais que pour code> boucle était gênant ... merci pour les suggestions! :-)
Je sais que c'est un vieux fil, mais je reçois des résultats erratiques de la colonne, alors je pensais donner ma solution. Je voulais regrouper toutes les 3 lignes en 3 colonnes espacées uniformément.
cat file.txt | xargs printf '%-24s\n' | sed '$p;N;s/\n//;$p;N;s/\n//'
Ceci est un scénario différent de la question. Vous devriez probablement le poster comme une autre question.
C'est une bonne réponse à la question que j'avais eue. Je devais sortir des colonnes sans utiliser de colonne.
Je sais que c'est un vieux fil mais j'ai couru dans cette même situation. J'ai fini par combiner quelques idées d'ici.
pour la solution basée sur l'utilitaire de colonne (sans problème d'espace initial): p> Utilisation de @ Arko's Script de base, cela peut gérer les valeurs avec des espaces. Remarquez la spécification Printf de% - * S pour la gauche, les colonnes et le droit abandonneraient le '-'. Je n'ai pas inclus mon supposition de terminal mais c'est réglable (Terminez-widdth). P> } p> p>
pour une raison quelconque à la place, j'ai utilisé p> colonne code> ne fonctionne pas pour moi. Dans mon cas, j'ai un tableau comme
Essayez: ifs = $ '\ n' echo "$ {tableau [@]}" | colonne code>
colonne code> semble avoir des difficultés avec les faits que votre entrée a une colonne et que certaines lignes sont plus étroites qu'un arrêt de tabulation.
écho "$ {valeurs [@] /% / $ '\ n'}" | colonne code> semble fonctionner
@JohnsyWeb: Je devais ajouter un autre espace avant
\ n code> pour le faire fonctionner avec cet ensemble de données. Mais cuitriment, la sortie est sur 3 colonnes seulement. Bien qu'il y ait beaucoup de salles pour 5 colonnes.
@Abo: So.com a avalé mon double espace avant le
\ n code>!
écho "$ {valeurs [@] /% / $ '\ n'}" | Column -C 120 code> fournit cinq colonnes pour moi.
Encore une fois, si divisez de moitié mes espaces avant la nouvelle ligne!
@JohnsyWeb: En fait, je n'ai donc pas avalé vos espaces. Il s'agit d'une fonctionnalité HTML, plusieurs espaces blancs sont rendus comme une par défaut. Regardez la source, ils sont.
@Arko. Bien sûr, vous avez raison. J'espérais que les backtsks pouvaient aider à les préserver. Vis et apprend!