linux之awk命令格式化输出(printf)使用技巧
在使用awk命令的过程中输出的每一列总是对不齐,看着很乱,如下:
[root@linuxforliuhj ~]# awk -F ":" '/sbin:/{print $1,$4,$5,$7}' /etc/passwd daemon 2 daemon /sbin/nologinsync 0 sync /bin/syncshutdown 0 shutdown /sbin/shutdownhalt 0 halt /sbin/halt
如果我们想要输出的结果整齐的话则需要使用printf代替print输出,这里printf的语法与c语言基本相似
awk -F ":" 'BEGIN{print"用户名\t\t 字段1\t\t\t字段2\t\t\t权限"}/sbin:/{printf "%-20s%-20s%-20s%-20s\n", $1,$4,$5,$7}' /etc/passwd
[root@linuxforliuhj ~]# awk -F ":" 'BEGIN{print"用户名\t\t 字段1\t\t\t字段2\t\t\t权限"}/sbin:/{printf "%-20s%-20s%-20s%-20s\n", $1,$4,$5,$7}' /etc/passwd 用户名 字段1 字段2 权限daemon 2 daemon /sbin/nologin sync0 sync/bin/sync shutdown 0 shutdown /sbin/shutdownhalt0 halt/sbin/halt
先通过BEGIN{}模式输出表头,然后后面通过printf输出表内容:
%-20s
:通常我们用的是%s来代替一个字符串,这里-20表示占位20个字节,负号表示左对齐,正号表示右对齐
\n
:换行符表示输出完本行以后换行,直接使用print则会默认换行,不需要手工添加
我们使用了4个%s占位,所以后面需要有4个参数.
在此基础上还可以进行变化,例如
awk -F ":" 'BEGIN{print"用户名\t\t\t字段1\t\t 字段2\t\t 权限"}/sbin:/{printf "user:%-20s%-20s%-20s%-20s\n", $1,$4,$5,$7}' /etc/passwd
[root@linuxforliuhj ~]# awk -F ":" 'BEGIN{print"用户名\t\t\t字段1\t\t字段2\t\t权限"}/sbin:/{printf "user:%-20s%-20s%-20s%-20s\n", $1,$4,$5,$7}' /etc/passwd 用户名 字段1字段2 权限user:daemon 2 daemon /sbin/nologin user:sync0 sync/bin/sync user:shutdown 0 shutdown /sbin/shutdownuser:halt0 halt/sbin/halt