2014-02-18 2 views
0
#!/bin/awk -f 
{ 
if (length($0) < 80) 
{ 
     prefix = ""; 
     for (i = 1;i<(80-length($0))/2;i++) 
      prefix = prefix " "; 
     print prefix $0; 
    } 
else 
{ 
print; 
    } 
} 

Может кто-нибудь скажет мне, что именно префиксная переменная делает в приведенном выше коде.Нужна помощь при понимании кода ниже awk (&&&&) code:

+0

Вы можете попробовать заменить префикс = префикс ""; "с префикс = префикс" | ";' или что-то подобное и посмотреть, что произойдет. – pfnuesel

+1

Возможно, было бы проще просто сделать '{printf"% 80s \ n ", $ 0}', чтобы иметь этот отступ. – fedorqui

ответ

0

Он увеличивает prefix с пустым пространством для создания линии с пространством впереди в соответствии с формулой.

echo "test" | awk -f script 
            test 
0

он строит пустой держатель строки места (для левой прокладки), которая имеет длину = (80-length of the line)/2

1

Это сделать входящий текст в центре выровненного текста.

  1. Прочитайте текст
  2. Объявите пустую строку в имя переменной префикс
  3. Вычислить положение, в котором, чтобы вставить текст определяется для цикла предваряя пространства для того же. В этом случае, мы выводим пространство, пока мы находимся в положении, при ((80 - длина вашей строки)/2)
  4. печати вашей строка

Примечание: $ 0 в AWK ваша полная строка, как «Я хочу проверить это», где $ 1 будет «я», а 2 доллара будет «хотеть», где, как и в оболочке, он печатает текущую оболочку, с которой вы работаете

1

Это добавление переднего отступа, чтобы центрировать строку на если он короче длины линии, но вы можете сделать то же самое:

awk '{ printf "%*s\n",(80+length($0))/2, $0 }' file 
Смежные вопросы