2008-11-06 5 views
2

Попытка распечатать список значений из двух разных переменных, которые выровнены правильно.Unix C Shell Scripting printf help

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

Это выводит их из строя, но они одно за другим. Как мне пройти через каждый элемент в каждом списке, а затем перейти к новой строке?

Я хочу, чтобы в конечном итоге выглядеть следующим образом:

Correct Incorrect 
Good1  Bad1 
Good2  Bad2 
Good3  Bad3 

Хорошо приходит от correctList Bad приходит от wrongList

Избавление от \ п делает это следующим образом:

Good1  Bad1 Good2 Bad2 

Мне просто нужны две колонки.

+0

Можете ли вы дать макет, как вы хотите, используя correct1, correct2 и wrong1 wrong2 и т. Д. Для элементов в каждом списке? – Svante 2008-11-06 00:37:22

ответ

5

Вы можете перемещаться по обоим спискам, в то же время, как это:

# 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

Предложение - применимо ко всем языкам, использующим дескрипторы типа printf, - использовать «% -20s% s \ n» (или «% -19s% s \ n», если второй столбец обычно начинается в столбце 21). Это гарантирует, что между этими двумя значениями существует пробел, даже если первый длиннее 20 (или 19) символов. – 2008-11-06 01:06:02

0

стараются избавиться от \ п

+0

, тогда они просто распечатывают все. Он заканчивается тем, что Good1 Bad1 Good2 Bad2 – Doug 2008-11-06 00:48:40

+0

@Ray: Это не подходит к вопросу. – 2008-11-06 01:03:29

0

Я считаю, что пр (1) команда с опцией -m поможет делай что хочешь. Посмотрите на свою страницу руководства, чтобы исключить опции заголовка/трейлера и установить ширину столбца.

Кроме того, я рекомендую не использовать C-Shell для сценариев; вы обнаружите, что оболочки sh-синтаксиса (sh, bash, ksh и т. д.) более согласованы и гораздо проще отлаживать.

Смежные вопросы