0
点赞
收藏
分享

微信扫一扫

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 '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之前定义





举报

相关推荐

0 条评论