awk学习笔记(3) - 输出文件的列

简介:

输出文件中的指定列

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

$0是完整的行,$1就是第一列,$2就是第二列,以此类推。提出一个问题,如果列号不存在会怎么样?试一下:

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

会发现输出了一串的空白。如果要取出多列,只需要用逗号分隔多个列号就可以了。

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

输出如下:

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

可以看到,列的位置已经交换了。

再提出一个问题,如果$2与$1之间有空白字符会如何?比如:

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

执行之后会发现,跟之前的程序输出没有任何区别,也就是说逗号之间的空白字符不会影响最终的输出结果。

第三个问题来了,如果想在$2和$1之间加上一些新的字符,该怎么加呢?

试下下面的语句:

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

输出结果:

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

效果不错。原来只需要用双引号将字符串包起来,放到print中就可以了,真的是很简单。

如果想去掉$2与$1之间的空格怎么办呢?

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

上面的程序输出结果:

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

可以看到"-"前后的空格没有了,实际上,在awk中变量是可以直接连接的,比如:

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

这会输出如下的结果:

 
 
  1. 10347:26 
  2. 10257:27 
  3. 11017:32 
  4. 10067:45 
  5. 10127:46 
  6. 10287:49 
  7. 10517:51 
  8. 10297:57 
  9. 10427:59 
  10. 10088:01 
  11. 10528:05 
  12. 10058:12 
  13. 10058:13 
  14. 10058:13 
  15. 10058:13 

$1和$2的域会紧挨着输出,这一点与php和js是不一样的,php中变量要连接字符串需要用".",在js中需要用"+",这里需要注意。

如果$1与$2之前有一个逗号,比如:

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

则会在域中加上默认的域分隔符(空格),结果如下:

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

 










本文转自 ustb80 51CTO博客,原文链接:http://blog.51cto.com/ustb80/1032393,如需转载请自行联系原作者
目录
相关文章
|
流计算 Windows
Flink窗口与状态编程开发(一)
Flink窗口与状态编程开发(一)
|
数据采集 IDE API
Aiohttp异步爬取小说排行榜
Aiohttp异步爬取小说排行榜
361 1
|
11月前
|
存储 数据挖掘 计算机视觉
Pandas数据应用:图像处理
Pandas 是一个强大的 Python 数据分析库,主要用于处理结构化数据。尽管它不是专门为图像处理设计的,但可以利用其功能辅助图像处理任务。本文介绍如何使用 Pandas 进行图像处理,包括图像读取、显示、基本操作及常见问题解决方法。通过代码案例解释如何将图像转换为 DataFrame 格式,并探讨数据类型不匹配、内存溢出和颜色通道混淆等问题的解决方案。总结中指出,虽然 Pandas 可作为辅助工具,但在实际项目中建议结合专门的图像处理库如 OpenCV 等使用。
280 18
|
存储 消息中间件 人工智能
ApsaraMQ Serverless 能力再升级,事件驱动架构赋能 AI 应用
本文整理自2024年云栖大会阿里云智能集团高级技术专家金吉祥的演讲《ApsaraMQ Serverless 能力再升级,事件驱动架构赋能 AI 应用》。
463 97
|
11月前
|
存储 固态存储 应用服务中间件
阿里云服务器租赁价格:实例配置、预留实例券、块存储、带宽、快照最新收费标准
阿里云服务器收费项目有实例价格、预留实例券、专有宿主机、块存储价格、存储容量单位包、带宽价格和快照服务价格,收费模式有包年包月和按量付费模式。2025年阿里云继续推出各种云服务器优惠,本文为大家汇总了2025年阿里云服务器各个收费项目的最新收费标准与云服务器的最新活动价格,以供参考和了解。
881 24
|
消息中间件 分布式计算 算法
大数据-67 Kafka 高级特性 分区 分配策略 Ranger、RoundRobin、Sticky、自定义分区器
大数据-67 Kafka 高级特性 分区 分配策略 Ranger、RoundRobin、Sticky、自定义分区器
199 3
|
网络协议 Linux 网络安全
RHEL 网络配置
本文介绍了Linux网络配置的基本方法,重点讲解了如何使用nmtui命令配置网络参数、查看网络信息及管理网络会话服务。同时,文章还介绍了通过nmtui、hostnamectl和nmcli命令修改主机名的具体步骤,帮助网络管理员快速调整Linux系统的网络设置。
322 3
|
搜索推荐 算法 C++
蓝桥杯分糖果、最小化战斗力差距、小蓝零花钱
这是一个关于算法问题的集合,包括三个不同的任务: 1. **分糖果**:肖恩有不同种类的糖果要分给学生,目标是使得到糖果字符串的字典序最大且尽量小。给定糖果种类数和一个初始字符串,输出能达到的最小字典序的最大值。 2. **最小化战斗力差距**:小蓝需要将队员分为两组,每组战斗力差距最小。给定队员数量和战斗力值,找出最小的战斗力差距。 3. **小蓝的零花钱**:小蓝要在序列中分割偶数和奇数,每次分割代价是两端元素差的绝对值。目标是在预算内确定最多能进行多少次这样的分割。 每个问题都提供了输入输出示例和相应的C++代码片段来解决这些问题。
|
移动开发 前端开发 JavaScript
Notepad++,还有 5 款更牛逼的选择
Notepad++,还有 5 款更牛逼的选择
357 1