当前工作中经常遇到需要格式化输出字符串的场景,今天整理下使用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是强大的文本处理工具,在后续实践中不断完善次文档。