awk学习笔记(4) - 显示行号

简介:

awk的输出总共只有两个东东,一个是print指令,一个是printf函数。

显示文件的行号

我们还是以上一篇的arr.dat文件来测试。

 
 
  1. awk '{print NR,$0}' arr.dat 

在awk中有很多的内置的变量,NR就是其中之一,表示的是当前的行号。上面的语句就可以解释成:逐行输出,并在其前输出行号。看一下输出结果:

 
 
  1. 1 1034 7:26  
  2. 2 1025 7:27 
  3. 3 1101 7:32  
  4. 4 1006 7:45 
  5. 5 1012 7:46  
  6. 6 1028 7:49  
  7. 7 1051 7:51 
  8. 8 1029 7:57  
  9. 9 1042 7:59 
  10. 10 1008 8:01  
  11. 11 1052 8:05  
  12. 12 1005 8:12 
  13. 13 1005 8:13 
  14. 14 1005 8:13 
  15. 15 1005 8:13 

行号后面会有一个字白字符与第二列进行分隔。这个空白字符是awk默认的,当然也可以进行修改。

上面的输出格式很不好看呀,随着行号数字位数的增多,格式开始变形。第一个问题来了,怎么让行号右对齐?

 
 
  1. awk '{printf("%5d %s\n", NR, $0)}' arr.dat 

我们终于用到了printf函数,这跟C语言的好像没什么不同。%5d表示输出一个5位的整数,如果不足5位,以空白填充,%s表示输出一个字符串。上面的程序的意思就是逐行输出文件内容,并在每行的第一列前追加行号,行号不足5位时以空白填充,一行结束后,以\n换行。

    注意,在%5d和%s之间有一个空字符,如果没有的话,行号就会与第1列挨着,很不好看呀。我们看一下输出结果:

 
 
  1.  1 1034 7:26  
  2.  2 1025 7:27 
  3.  3 1101 7:32  
  4.  4 1006 7:45 
  5.  5 1012 7:46  
  6.  6 1028 7:49  
  7.  7 1051 7:51 
  8.  8 1029 7:57  
  9.  9 1042 7:59 
  10. 10 1008 8:01  
  11. 11 1052 8:05  
  12. 12 1005 8:12 
  13. 13 1005 8:13 
  14. 14 1005 8:13 
  15. 15 1005 8:13 

当然,我们也可以将这个空字符换成别的,比如\t:

 
 
  1. awk '{printf("%5d\t%s\n", NR, $0)}' arr.dat 

输出就成了:

 
 
  1.  1  1034 7:26  
  2.  2  1025 7:27 
  3.  3  1101 7:32  
  4.  4  1006 7:45 
  5.  5  1012 7:46  
  6.  6  1028 7:49  
  7.  7  1051 7:51 
  8.  8  1029 7:57  
  9.  9  1042 7:59 
  10. 10  1008 8:01  
  11. 11  1052 8:05  
  12. 12  1005 8:12 
  13. 13  1005 8:13 
  14. 14  1005 8:13 
  15. 15  1005 8:13 

在这个问题的基础上,我们可以有另外一个收获。看一下下面的程序:

 
 
  1. awk 'END {print NR}' arr.dat 

输出结果如下:

 
 
  1. 15 

没错,这就是文件的行数,当然,这种统计方法不是linux下最快的,最快的是下面的语句:

 
 
  1. wc -l arr.dat 

输出结果:

 
 
  1. 15 arr.dat 

但也是一种思路。

第二个问题:如果有两个print会怎么样呢?比如:

 
 
  1. awk '{print $1} {print $2}' arr.dat 

输出结果:

 
 
  1. 1034 
  2. 7:26 
  3. 1025 
  4. 7:27 
  5. 1101 
  6. 7:32 
  7. 1006 
  8. 7:45 
  9. 1012 
  10. 7:46 
  11. 1028 
  12. 7:49 
  13. 1051 
  14. 7:51 
  15. 1029 
  16. 7:57 
  17. 1042 
  18. 7:59 
  19. 1008 
  20. 8:01 
  21. 1052 
  22. 8:05 
  23. 1005 
  24. 8:12 
  25. 1005 
  26. 8:13 
  27. 1005 
  28. 8:13 
  29. 1005 
  30. 8:13 

可以看到第二列放到了第一列之后换行显示。如果在print中将$1和$2之间加一个\n是不是也能起到同样的效果呢?

 
 
  1. awk '{print $1,"\n",$2}' arr.dat 

看一下输出结果:

 
 
  1. 1034  
  2.  7:26 
  3. 1025  
  4.  7:27 
  5. 1101  
  6.  7:32 
  7. 1006  
  8.  7:45 
  9. 1012  
  10.  7:46 
  11. 1028  
  12.  7:49 
  13. 1051  
  14.  7:51 
  15. 1029  
  16.  7:57 
  17. 1042  
  18.  7:59 
  19. 1008  
  20.  8:01 
  21. 1052  
  22.  8:05 
  23. 1005  
  24.  8:12 
  25. 1005  
  26.  8:13 
  27. 1005  
  28.  8:13 
  29. 1005  
  30.  8:13 

会发现,第二列前的空白字符也被输出了,两者还是有所区别。










本文转自 ustb80 51CTO博客,原文链接:http://blog.51cto.com/ustb80/1033387,如需转载请自行联系原作者
目录
相关文章
|
人工智能 Java
零基础五步骤,从零开始天猫精灵
零基础五步骤,从零开始天猫精灵
1803 1
零基础五步骤,从零开始天猫精灵
Object转Map的两种方式
在平时的工作中,有时候需要将Object转换成Map。笔者这里总结了两种将Object转成Map的方式方法。
8550 0
|
域名解析 网络协议 安全
DNS&BIND9安装配置
DNS概念,BIND9的详细配置安装
2525 2
|
3月前
|
人工智能 缓存 自然语言处理
阿里云千问大模型Qwen3.7-Plus深度解析:模型能力与适用场景、便宜购买方法参考
2026年6月阿里云发布Qwen3.7-Plus多模态混合智能体大模型,其视觉推理能力大幅超越上代,纯文本与编程表现接近旗舰Max版本,还支持GUI、CLI环境下的自主闭环任务执行,适配软件自动化、多模态内容创作、通用智能体开发等场景。相比主打极致性能的Qwen3.7-Max,该模型更侧重落地性价比,平台同步推出五大低成本使用方案:新用户可领100万免费Tokens,搭配Token Plan订阅、低至4.5折的全模型通用节省计划、限时8折活动,还能叠加专属优惠券实现折上折,大幅降低开发者与企业的落地门槛。
|
Linux
CentOS下设置中文编码设置和中文乱码解决
CentOS下设置中文编码设置: 1:安装支持中文: yum -y group install chinese-support 2:修改字符编码配置文件: 默认设置为英文: [root@Tony_ts_tian sysconfig]# pwd /etc/sysconfig [root@Tony_ts_tian sysconfig]# cat i18n LANG="en_US.
6942 0
|
9月前
|
Rust 安全 Linux
从PowerShell到Rust:伊朗黑客组织MuddyWater携“RustyWater”木马升级攻击链,跨平台隐蔽性成新威胁
伊朗黑客组织MuddyWater于2026年初利用Rust语言编写新型木马“RustyWater”,通过鱼叉邮件攻击电信、金融等关键领域。该木马具强隐蔽性、跨平台能力,可规避传统安全检测,揭示APT攻击正向现代化、工程化演进,对中国网络安全防御体系构成严峻挑战,亟需提升对新型语言编写的恶意软件的检测与响应能力。
393 3
|
存储 弹性计算 监控
企业法务诉讼系统的建设方案
企业法务数字化迫在眉睫,传统管理方式难应复杂诉讼。构建统一诉讼系统,实现案件集中管控、内外高效协同、数据驱动决策与安全合规,助力企业风险防控与管理升级。
508 0
|
人工智能 自然语言处理 Java
Spring Cloud Alibaba AI 入门与实践
本文将介绍 Spring Cloud Alibaba AI 的基本概念、主要特性和功能,并演示如何完成一个在线聊天和在线画图的 AI 应用。
4524 8
|
XML JSON Java
Java POI Word07版插入图片并指定浮动位置
由于工作需要,又接触到了POI操作Word,以往只是简单的读取操作,这次是写入操作;
2012 1
Java POI  Word07版插入图片并指定浮动位置
|
Linux
如何查看当前的NFS挂载信息?
如何查看当前的NFS挂载信息?
3757 2