使用awk按表格格式化显示
来源:互联网 发布:短信 群发 软件 编辑:程序博客网 时间:2024/04/29 21:59
本文链接:http://blog.csdn.net/kongxx/article/details/8284952
今天工作中碰到一个问题,需要过滤一些命令行的输出,并且将结果按类似表格的格式输出
这里假定有一个命令的输出如下,假定我们过滤掉了其中某些列或者行,这里我们将其存入test.txt文件
ID Name Designation Department Salary100 Thomas Manager Sales $5,000200 Jason Developer Technology $5,500300 Sanjay Sysadmin Technology $7,000400 Nisha Manager Marketing $9,500500 Randy DBA Technology $6,000下面是一个简单的awk文件,将其保存到test.awk文件里。
function format(value, maxlen, align) {len=length(value);lendiff=maxlen-len;if (lendiff>0) {for (k=0; k<lendiff; k++) {if(align=="right") {value=value" ";} else {value=" "value;}}}return value;}BEGIN {rows=0;cols=5;}{if(NF==cols) {for(i=1; i<=NF; i++) {if (length($i) > lengths[i]) lengths[i]=length($i);}rows++;for(col=1; col<=NF; col++) {data[rows, col]=$col;}}}END {for(i=1; i<=length(lengths); i++) {lengths[i]=lengths[i]+4;}for(i=1; i<=rows; i++) {print format(data[i, 1], lengths[1]), format(data[i, 2], lengths[2], "right"), format(data[i, 3], lengths[3], "right"), format(data[i, 4], lengths[4], "right"), format(data[i, 5], lengths[5])}}首先是一个format函数,用来格式化某些字符串,这个函数包含三个参数:第一个参数value是需要格式化的字符串,第二个参数是需要把字符串格式化成多长的字符串,第三个参数是用来表示当字符串长度小于maxlen时,在前面还是在后面补空格。
接下来是BEGIN部分,定义了两个变量,rows是用来表示文本内容共有多少行需要处理,这里考虑到空行问题所以没有使用NR变量;cols是用来定义最终需要显示的列数,这里假定全部列都需要,所以定义成5.
Action部分,处理了所以列是5的的行,这里根据需要可以写自己的过滤条件,上面例子里为了方面没有做过多过滤;这部分使用了两个循环:第一个循环用来计算所以行中每一列的最大长度,并将其保存在lengths数组中;第二个循环是将所以需要的数据放到一个二维数组中;
最后是END部分,此部分也包括两个循环:第一个循环是将每一列的最大长度加4,目的是为了在每一列之间加一些间隔;第二个循环是用来格式化输出的,其中将Name,Designation和Department列左对齐,数字列右对齐。
测试,在命令行运行awk -f test.awk test.txt命令,可以得到如下结果
ID Name Designation Department Salary 100 Thomas Manager Sales $5,000 200 Jason Developer Technology $5,500 300 Sanjay Sysadmin Technology $7,000 400 Nisha Manager Marketing $9,500 500 Randy DBA Technology $6,000
http://blog.csdn.net/kongxx/article/details/8284952
0 0
- 使用awk按表格格式化显示
- 使用awk按表格格式化显示
- 使用VBA格式化表格
- thymeleaf中使用layui 的自动化表格显示对象的某一属性值(格式化输出)
- 使用格式化显示数据
- 使用表格显示数据
- 使用JSP显示表格
- easy ui 表格格式化动态绑定,表格格式化后获取表格值是value而不是显示的值
- 遍历表格的内容并用控制台格式化显示
- 使用shell+awk完成Hive查询结果格式化输出
- awk 文本格式化
- 利用awk格式化数据
- awk 格式化输出
- awk 格式化输出
- 7.awk格式化打印
- 使用jquery easyui 对表格中的时间格式化
- 如何使用Javascript格式化日期显示
- 如何使用Javascript格式化数字显示
- java连接mysql数据库的方法
- 关于Fatal Error in GC : Too Many threads
- 第十五周 程序阅读三
- performClick使用注意事项
- Jquer Easyui Tree 异步加载
- 使用awk按表格格式化显示
- FFmpeg 基本用法
- 监听Android的Home键碰到的问题
- 微观SOA:服务设计原则及其实践方式
- 给BW的数据存储对象建立索引
- UIButton的titleEdgeInsets和imageEdgeInsets属性
- Linux使用蓝牙连接设备
- SylixOS ARM BSP 第三篇【bspInit.c】
- 用三个函数捕捉消息 先后顺序 判断消息的来源 子窗口的判断