awk格式化
利用awk中的printf动作,即可对文本进行格式化输出,printf动作的用法与print命令的用法非常相似,只是有略微的不同而已,不过,我们还是从最简单的示例开始看起,首先对比一下print动作与printf动作的区别,示例如下
[root@server01 ~]# awk '{print $1}' test1 abc 8ua [root@server01 ~]# awk '{printf $1}' test1 abc8ua[root@server01 ~]#
没错,printf动作与printf命令一样,都不会输出换行符,默认会将文本输出在一行里面。
[root@server01 ~]# awk '{printf "%s\n",$1}' test1 abc 8ua
指定的"格式"与列($1)之间需要用"逗号"隔开,而使用printf命令时,指定的格式与传入的文本不需要使用"逗号"隔开
[root@server01 ~]# printf "%s\n" teststring teststring
[root@server01 ~]# printf "%s\n" 1 2 3 4 5 6 1 2 3 4 5 6
在awk中,我们则不能这样使用,在awk中,格式替换符的数量必须与传入的参数的数量相同,换句话说,格式替换符必须与需要格式化的参数一一对应
[root@server01 ~]# awk 'BEGIN{printf "%s\n",1,2,3,4,5}' 1 [root@server01 ~]# awk 'BEGIN{printf "%s\n%s\n%s\n%s\n%s\n",1,2,3,4,5}' 1 2 3 4 5
我们来总结一下,在awk中使用printf动作时,需要注意以下3点。 1)使用printf动作输出的文本不会换行,如果需要换行,可以在对应的"格式替换符"后加入"\n"进行转义。 2)使用printf动作时,"指定的格式" 与 "被格式化的文本" 之间,需要用"逗号"隔开。 3)使用printf动作时,"格式"中的"格式替换符"必须与 "被格式化的文本" 一一对应。
[root@server01 ~]# awk '{printf "第一列:%s 第二列:%s\n",$1,$2}' test1 第一列:abc 第二列:123 第一列:8ua 第二列:456
[root@server01 ~]# awk '{printf "第一列:%s\t第二列:%s\n",$1,$2}' test1 第一列:abc 第二列:123 第一列:8ua 第二列:456
[root@server01 ~]# awk -v FS=":" 'BEGIN{printf "%-10s\t%s\n","用户名称","用户ID"} {printf "%-10s\t%s\n",$1,$3}' /etc/passwd
用户名称 用户ID
root 0
bin 1
daemon 2
adm 3
lp 4
sync 5
shutdown 6
halt 7
mail 8
operator 11
games 12
ftp 14
nobody 99
systemd-network 192
dbus 81
polkitd 999
sshd 74
postfix 89
chrony 998
ntp 38
tss 59
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
2019-12-25 通过yum-cron对linux进行安全更新
2019-12-25 Docker容器跨主机通信之:直接路由方式
2019-12-25 docker-ovs+vxlan