2008-11-06 6 views
2

Tentative d'impression d'une liste de valeurs à partir de 2 variables différentes alignées correctement.Unix C Shell Scripting printf help

foreach finalList ($correctList $wrongList) 
printf "%20s%s\n" $finalList 
end 

Cela les imprime et ils sont alignés les uns après les autres. Comment est-ce que je l'aurais passer par chaque article dans chaque liste et ALORS aller à une nouvelle ligne?

Je veux qu'ils apparaissent finalement comme ceci:

Correct Incorrect 
Good1  Bad1 
Good2  Bad2 
Good3  Bad3 

Bon vient de correctList Bad vient de wrongList

Se débarrasser de \ n fait comme ceci:

Good1  Bad1 Good2 Bad2 

Je veux juste 2 colonnes.

+0

Pouvez-vous donner une mise en page comme vous le souhaitez, en utilisant correct1, correct2 et faux1 faux2 etc. pour les éléments de chaque liste? – Svante

Répondre

5

Vous pouvez parcourir les deux listes en même temps comme celui-ci:

# Get the max index of the smallest list 
set maxIndex = $#correctList 
if ($#wrongList < $#correctList) then 
    set maxIndex = $#wrongList 
endif 

set index = 1 
while ($index <= $maxIndex) 
    printf "%-20s %s\n" "$correctList[$index]" "$wrongList[$index]" 
    @ index++ 
end 
+0

Suggestion - applicable à toutes les langues utilisant des notations de type printf - utiliser "% -20s% s \ n" (ou "% -19s% s \ n" si la deuxième colonne doit normalement commencer dans la colonne 21). Cela garantit qu'il existe un espace entre les deux valeurs, même si le premier est plus long que 20 (ou 19) caractères. –

+0

@Jonathan, j'ai pris votre suggestion pour cet exemple mais ce n'est pas toujours le comportement désiré. Par exemple, je dois souvent écrire des routines pour exporter des données vers des formats de fichiers à largeur fixe où des espaces ne sont pas requis entre les champs (et l'insertion d'espaces non autorisés briserait la mise en page). –

0

try se débarrasser de la \ n

+0

alors ils impriment juste partout. Il finit par être Bon1 Mauvais1 Bon2 Mauvais2 – Doug

+0

@Ray: Cela manque le point de la question. –

0

Je crois que la commande pr (1) avec l'option -m aidera fais ce que tu veux. Regardez sa page de manuel pour éliminer les options d'en-tête/de bande-annonce et définir les largeurs de colonnes.

Aussi, je vous recommande de ne pas utiliser le C-Shell pour les scripts; vous trouverez les sh-syntax shells (sh, bash, ksh, etc) plus cohérents et beaucoup plus faciles à déboguer.

+0

Je pense que les dangers de l'utilisation de csh sont annoncés assez bien. Devons-nous le mentionner chaque fois que quelqu'un demande de l'aide avec csh? – LivingDust