我使用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
实现此目的。此外,代码应该适用于由|
答案 0 :(得分:2)
尝试将您的awk结果传递给column
:
awk 'whatever'|column -t
答案 1 :(得分:1)
Private Sub Txtbx_TimeAvailable_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If Me.Txtbx_TimeAvailable.Value <> Format(Me.Txtbx_TimeAvailable.Value, "[h]:mm") Then
MsgBox "Please enter correct time format in hh:mm"
Cancel = True
Me.Txtbx_TimeAvailable.Value = vbNullString
Else
ThisWorkbook.Sheets(SELECTEDWORKSHEET).Range("C60").Value = Txtbx_TimeAvailable.Text
Call UpdateDentistMainForm
End If
End Sub
解决方案将使用printf
awk
请注意,如果您删除awk -F: '{printf "%-15s | %s\n",$1,$6}' /etc/passwd
符号,则可以右对齐用户ID。
答案 2 :(得分: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]
}
}
以上计算每个字段的最大宽度,然后在打印时使用它,以确保字段无论输入文件的内容如何都能正确对齐。