awk + printf 配合使用,快速格式化输出字符串

本文介绍了如何利用awk和printf在Linux环境中对文本进行格式化输出,包括从postgresql的kwlist.h文件中获取数据,根据保留关键字属性排序,并进行左对齐或右对齐的显示。

当前工作中经常遇到需要格式化输出字符串的场景,今天整理下使用awk + printf快速实现的方法。

1.数据源

选取postgresql代码库中kwlist.h文件(记录PG中保留关键字和非保留关键字信息)中的一部分作为源数据。

[root@localhost Postgres]# cat kwlist.h | grep -E '^PG_KEYWORD' | head -n 20 > source_data.txt
[root@localhost Postgres]# cat source_data.txt
PG_KEYWORD("abort", ABORT_P, UNRESERVED_KEYWORD)
PG_KEYWORD("absolute", ABSOLUTE_P, UNRESERVED_KEYWORD)
PG_KEYWORD("access", ACCESS, UNRESERVED_KEYWORD)
PG_KEYWORD("action", ACTION, UNRESERVED_KEYWORD)
PG_KEYWORD("add", ADD_P, UNRESERVED_KEYWORD)
PG_KEYWORD("admin", ADMIN, UNRESERVED_KEYWORD)
PG_KEYWORD("after", AFTER, UNRESERVED_KEYWORD)
PG_KEYWORD("aggregate", AGGREGATE, UNRESERVED_KEYWORD)
PG_KEYWORD("all", ALL, RESERVED_KEYWORD)
PG_KEYWORD("also", ALSO, UNRESERVED_KEYWORD)
PG_KEYWORD("alter", ALTER, UNRESERVED_KEYWORD)
PG_KEYWORD("always", ALWAYS, UNRESERVED_KEYWORD)
PG_KEYWORD("analyse", ANALYSE, RESERVED_KEYWORD)        /* British spelling */
PG_KEYWORD("analyze", ANALYZE, RESERVED_KEYWORD)
PG_KEYWORD("and", AND, RESERVED_KEYWORD)
PG_KEYWORD("any", ANY, RESERVED_KEYWORD)
PG_KEYWORD("array", ARRAY, RESERVED_KEYWORD)
PG_KEYWORD("as", AS, RESERVED_KEYWORD)
PG_KEYWORD("asc", ASC, RESERVED_KEYWORD)
PG_KEYWORD("assertion", ASSERTION, UNRESERVED_KEYWORD)
2.将关键字按照保留或非保留的属性排序输出
[root@localhost Postgres]# cat source_data.txt | awk -F ",|)" '{print $3 "," $2}' | tr -d ' ' | sort
RESERVED_KEYWORD,ALL
RESERVED_KEYWORD,ANALYSE
RESERVED_KEYWORD,ANALYZE
RESERVED_KEYWORD,AND
RESERVED_KEYWORD,ANY
RESERVED_KEYWORD,ARRAY
RESERVED_KEYWORD,AS
RESERVED_KEYWORD,ASC
UNRESERVED_KEYWORD,ABORT_P
UNRESERVED_KEYWORD,ABSOLUTE_P
UNRESERVED_KEYWORD,ACCESS
UNRESERVED_KEYWORD,ACTION
UNRESERVED_KEYWORD,ADD_P
UNRESERVED_KEYWORD,ADMIN
UNRESERVED_KEYWORD,AFTER
UNRESERVED_KEYWORD,AGGREGATE
UNRESERVED_KEYWORD,ALSO
UNRESERVED_KEYWORD,ALTER
UNRESERVED_KEYWORD,ALWAYS
UNRESERVED_KEYWORD,ASSERTIO
3.将关键字按照保留或非保留的属性排序,并按照左对齐/右对齐输出
[root@localhost Postgres]# cat source_data.txt | awk -F ",|)" '{print $3 "," $2}' | tr -d ' ' | sort | awk -F "," '{printf "%-20s,%12s\n",$1,$2}'
RESERVED_KEYWORD    ,         ALL
RESERVED_KEYWORD    ,     ANALYSE
RESERVED_KEYWORD    ,     ANALYZE
RESERVED_KEYWORD    ,         AND
RESERVED_KEYWORD    ,         ANY
RESERVED_KEYWORD    ,       ARRAY
RESERVED_KEYWORD    ,          AS
RESERVED_KEYWORD    ,         ASC
UNRESERVED_KEYWORD  ,     ABORT_P
UNRESERVED_KEYWORD  ,  ABSOLUTE_P
UNRESERVED_KEYWORD  ,      ACCESS
UNRESERVED_KEYWORD  ,      ACTION
UNRESERVED_KEYWORD  ,       ADD_P
UNRESERVED_KEYWORD  ,       ADMIN
UNRESERVED_KEYWORD  ,       AFTER
UNRESERVED_KEYWORD  ,   AGGREGATE
UNRESERVED_KEYWORD  ,        ALSO
UNRESERVED_KEYWORD  ,       ALTER
UNRESERVED_KEYWORD  ,      ALWAYS
UNRESERVED_KEYWORD  ,   ASSERTION

这里只记录了通过awk + printf实现简单的格式化输出的方法,awk是强大的文本处理工具,在后续实践中不断完善次文档。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值