2016-08-16 2 views
0

Я пытаюсь напечатать красивую и симпатичную таблицу, отображающую значения нескольких (3) переменных. Одна из переменных содержит несколько строк в качестве содержимого. Что искажает формат создаваемой таблицы.форматирование столбцов для многострочной переменной bash

Пробовал с echo -e первым, что не помогло в использовании printf, но все еще не в состоянии исправить форматирование. Любая помощь приветствуется. Благодарю.

var1=10 
var2=20 
var3=$(cat temp.db) #This is causing issue. 

printf "%-10s%-10s%-30s\n" "var1" "var2" "var3" 
printf "%-10s%-10s%-30s\n" "$var1" "$var2" "$var3" 

где temp.db структурирована следующим образом:

cat temp.db 

2 user1 
3 user2 
5 user3 
6 user7 
9 user9 

Желаемый результат:

var1  var2 var3 
10  20  2 user1 
        3 user2 
        5 user3 
        6 user7 
        9 user9 

То, что я в настоящее время получаю:

var1  var2  var3 
10  20  2 user1 
3 user2 
5 user3 
6 user7 
9 user9 

ответ

3

Это звучит как работа для awk -man (a). Следующая запись показывает его в действии:

yup> awk ' 
...> BEGIN { 
...>  v1 = 10; v2 = 20; f="%-10s %-10s %-30s\n"; 
...>  printf f, "var1", "var2", "var3"; 
...> } 
...> { 
...>  printf f, v1, v2, $0; 
...>  v1 = ""; v2 = ""; 
...> }' inputFile 

var1  var2  var3 
10   20   2 user1 
         3 user2 
         5 user3 
         6 user7 
         9 user9 

Игнорируйте ...> вещей, они мое продолжение приглашения PS2 так что я могу хорошо выстраиваться заявлениями многострочного (некоторые из ; символов также лишние, но я делаю это просто для согласованности).

Код просто устанавливает строку формата и начальные значения для var1/2, затем печатает заголовок в блоке BEGIN. Затем для каждой строки ввода он выводит нужные столбцы, отформатированные по мере необходимости.


(а) Подумайте Супермена, но с меньшим количеством квадратной челюстью, geekier очки и, возможно, карманным протектором, а :-)

+0

++ Аккуратные, спасибо, что работал для меня. –

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