格式化输出,比print更好用的命令

格式

printf [-v var] format [arguments]

-v var:将结果输出到变量var中而不是输出到标准输出。
format:必须指定输出格式。
arguments:一到多个参数。

format转义符

序列符

序列
\a警告字符,通常为ASCII的BEL字符
\b后退
\c不显示输出结果中任何结尾的换行字符,而且任何留在参数里的字符、任何接下来的参数以及任何留在格式字符串中的字符都被忽略。
\f换页
\n换行
\r回车
\t水平制表符
\v垂直制表符
\\反斜杠字符

格式符

符号描述
%cASCII字符.显示相对应参数的第一个字符
%d,%i十进制整数
%E浮点格式([-d].precisionE [+-dd])
%e浮点格式([-d].precisione [+-dd])
%g%e或%f转换,看哪一个较短,则删除结尾的零
%G%E或%f转换,看哪一个较短,则删除结尾的零
%s字符串
%u不带正负号的十进制值
%x不带正负号的十六进制.使用a至f表示10至15
%%字面意义的%
%X不带正负号的十六进制.使用A至F表示10至15

精度符

符号描述
%d,%i,%o,%u,%x,%X要打印的最小位数.当值的位数少于此数字时,会在前面补零.默认精度为1
%e,%E要打印的最小位数.当值的位数少于此数字时,会在小数点后面补零,默认为精度为6.精度为0则表示不显示小数点小数点右边的位数
%f小数点右边的位数
%g,%G有效位数的最大数目
%s要打印字符的最大数目

标识符

符号描述
将字段里已格式化的值向左对齐
空格在正值前置一个空格,在负值前置一个负号
+总是在数值之前放置一个正号或负号,即便是正值也是
#下列形式选择其一:%o有一个前置的o;%x与%X分别前置的0x与0X;%e,%E与%f总是在结果中有一个小数点;%g与%G为没有结尾的零。
0以零填补输出,而非空白.这仅发生在字段宽度大于转换后的情况

实例

# awk -F: '{print $1,$3}' /etc/passwd
# awk -F: '{printf "%20s---%u\n",$1,$3}' /etc/passwd
# awk -F: '{printf "%-20s---%-10.3f\n",$1,$3}' /etc/passwd
# awk -F: 'BEGIN{printf "username            userid\n-----------------------------\n"}{printf "%-20s|%-10.3f\n",$1,$3}' /etc/passwd