一、
printf语句
格式化输出,默认打印字符串不换行。
格式:printf [format] arguments
%s 一个字符串
%d,%i 下一个小数
%.ns 输出字符串,n是输出几个字符
%m.nf 输出浮点数,m是输出整数位数,n是输出的小数位数
%x 不带正负号的十六进制,使用a到f表示10到15
%X 不带正负号的十六进制,使用A到F表示10到15
%% 输出单个%
%-5s 左对齐,对参数每个字段左对齐,宽度为5
%-4.2f 左对齐,宽度为4,保留两位小数
%5s 右对齐,不加横线表示右对齐
1.
将换行符替换成逗号
[root@study ~]# seq 5|awk '{if($0!=5)printf "%s,",$0;else print $0}'
1,2,3,4,5
[root@study ~]# #输出一个字符:
[root@study ~]# awk 'BEGIN{printf "%.1s\n","abc"}'
a
[root@study ~]# #保留下一个小数点:
[root@study ~]# awk 'BEGIN{printf "%.2f\n",10/3}'
3.33
[root@study ~]# #格式化输出:
[root@study ~]# awk 'BEGIN{printf "user:%s\tpass:%d\n","abc",123}'
user:abc pass:123
[root@study ~]# #左对齐宽度10:
[root@study ~]# awk 'BEGIN{printf "%-10s %-10s %-10s\n","ID","NAME","PASSWORD"}'
ID NAME PASSWORD
[root@study ~]# #右对齐宽度10
[root@study ~]# awk 'BEGIN{printf "%10s %10s %10s\n","ID","NAME","PASSWORD"}'
ID NAME PASSWORD
打印表格
[root@study ~]# cat test.awk
BEGIN{
print "+--------------------+--------------------+";
printf "|%-20s|%-20s|\n","Name","Number";
print "+--------------------+--------------------+";
}
[root@study ~]# awk -f test.awk
+--------------------+--------------------+
|Name |Number |
+--------------------+--------------------+
格式化输出:
[root@study ~]# awk -F: 'BEGIN{printf "UserName\t\tShell\n----------------------------------\n"}{printf "%-20s %-20s\n",$1,$7}END{print "END...\n"}' /etc/passwd
UserName Shell
----------------------------------
root /bin/bash
bin /sbin/nologin
daemon /sbin/nologin
adm /sbin/nologin
lp /sbin/nologin
sync /bin/sync
shutdown /sbin/shutdown
halt /sbin/halt
mail /sbin/nologin
operator /sbin/nologin
games /sbin/nologin
ftp /sbin/nologin
nobody /sbin/nologin
systemd-network /sbin/nologin
dbus /sbin/nologin
polkitd /sbin/nologin
tss /sbin/nologin
sshd /sbin/nologin
postfix /sbin/nologin
chrony /sbin/nologin
apache /sbin/nologin
END...
打印十六进制:
[root@study ~]# awk 'BEGIN{printf "%x %X",123,123}'
7b 7B[root@study ~]#
自定义函数
格式:function name(parameter list) { statements}
[root@study ~]# awk 'function myfunc(a,b){return a+b}BEGIN{print myfunc(1,2)}'
3
没想到定义函数要在BEGIN之前定义