awk-printf 语句自定义函数

花门楼前见秋草,岂能贫贱相看老。这篇文章主要讲述awk-printf 语句自定义函数相关的知识,希望能为你提供帮助。
一、
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 BEGINprintf "%.1s\\n","abc"
a
[root@study ~]# #保留下一个小数点:
[root@study ~]# awk BEGINprintf "%.2f\\n",10/3
3.33
[root@study ~]# #格式化输出:
[root@study ~]# awk BEGINprintf "user:%s\\tpass:%d\\n","abc",123
user:abcpass:123
[root@study ~]# #左对齐宽度10:
[root@study ~]# awk BEGINprintf "%-10s %-10s %-10s\\n","ID","NAME","PASSWORD"
IDNAMEPASSWORD
[root@study ~]# #右对齐宽度10
[root@study ~]# awk BEGINprintf "%10s %10s %10s\\n","ID","NAME","PASSWORD"
IDNAMEPASSWORD

打印表格
[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: BEGINprintf "UserName\\t\\tShell\\n----------------------------------\\n"printf "%-20s %-20s\\n",$1,$7ENDprint "END...\\n" /etc/passwd
UserNameShell
----------------------------------
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 BEGINprintf "%x %X",123,123
7b 7B[root@study ~]#

自定义函数

格式:function name(parameter list)statements
[root@study ~]# awk function myfunc(a,b)return a+bBEGINprint myfunc(1,2)
3

没想到定义函数要在BEGIN之前定义




【awk-printf 语句自定义函数】




    推荐阅读