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,如需转载请自行联系原作者
目录
相关文章
|
1月前
|
Unix Shell Linux
如何使用 Awk 打印文件中的字段和列
如何使用 Awk 打印文件中的字段和列
24 0
|
2月前
|
Perl
在Awk中,直接通过文件作为输入
在Awk中,直接通过文件作为输入
28 2
|
4月前
|
Unix Java Linux
Linux脚本中的字符处理与awk编程|WC统计
Linux脚本中的字符处理与awk编程|WC统计
46 0
|
3月前
|
Linux Perl
【linux】awk用法:在每行新增额外字符串
【linux】awk用法:在每行新增额外字符串
30 0
|
8月前
|
Shell
Shell 过滤数据(cut 截取过滤列)
Shell 过滤数据(cut 截取过滤列)
64 0
|
Perl
使用 awk 命令统计文本
下面只是在工作中可能会遇到的一个场景,所以记录下来,如果小伙伴有更合适的方式来统计计算,欢迎留言。
211 0