2016-04-19 2 views
0

Я использовал awk генерировать следующий выводПечать форматированный вывод с использованием AWK

root | /root 
    bin | /bin 
    daemon | /sbin 
    adm | /var/adm 
    lp | /var/spool/lpd 

Мой awk запрос выглядит следующим образом

head -n 5 /etc/passwd | awk ' BEGIN{ FS=":";OFS=" | "; } { print $1 , $6 } ' 

Я хочу, чтобы выход, который будет отображаться в отформатированной образом, как показано ниже

root | /root 
    bin | /bin 
    daemon | /sbin 
    adm | /var/adm 
    lp  | /var/spool/lpd 

Возможно ли достичь этого, используя awk. Кроме того, код должен работать на нескольких входных полей, разделённых |

ответ

2

попробовать ТРУБОПРОВОДНЫЕ ваш результат AWK к column:

awk 'whatever'|column -t 
1

awk решение будет использовать PRINTF

awk -F: '{printf "%-15s | %s\n",$1,$6}' /etc/passwd 

к сведению, что если вы удалите Значок - вы также можете выровнять идентификаторы пользователей.

0
$ cat tst.awk 
BEGIN { FS=":"; OFS=" | " } 
FNR<=5 { 
    for (i=1;i<=NF;i++) { 
     wid[i] = (wid[i] > length($i) ? wid[i] : length($i)) 
     val[NR,i] = $i 
    } 
} 
END { 
    for (rowNr=1; rowNr<=NR; rowNr++) { 
     printf "%-*s | %-*s\n", wid[1], val[rowNr,1], wid[6], val[rowNr,6] 
    } 
} 

выше вычисляет максимальную ширину каждого поля, а затем использует, что при печати, чтобы убедиться, что поля выровнены независимо от содержимого вашего входного файла (ов).

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