输出文件中的指定列
- awk '{print $2}' arr.dat
$0是完整的行,$1就是第一列,$2就是第二列,以此类推。提出一个问题,如果列号不存在会怎么样?试一下:
- awk '{print $20}' arr.dat
会发现输出了一串的空白。如果要取出多列,只需要用逗号分隔多个列号就可以了。
- awk '{print $2,$1}' arr.dat
输出如下:
- 7:26 1034
- 7:27 1025
- 7:32 1101
- 7:45 1006
- 7:46 1012
- 7:49 1028
- 7:51 1051
- 7:57 1029
- 7:59 1042
- 8:01 1008
- 8:05 1052
- 8:12 1005
- 8:13 1005
- 8:13 1005
- 8:13 1005
可以看到,列的位置已经交换了。
再提出一个问题,如果$2与$1之间有空白字符会如何?比如:
- awk '{print $2, $1}' arr.dat
执行之后会发现,跟之前的程序输出没有任何区别,也就是说逗号之间的空白字符不会影响最终的输出结果。
第三个问题来了,如果想在$2和$1之间加上一些新的字符,该怎么加呢?
试下下面的语句:
- awk '{print $2, "-", $1}' arr.dat
输出结果:
- 7:26 - 1034
- 7:27 - 1025
- 7:32 - 1101
- 7:45 - 1006
- 7:46 - 1012
- 7:49 - 1028
- 7:51 - 1051
- 7:57 - 1029
- 7:59 - 1042
- 8:01 - 1008
- 8:05 - 1052
- 8:12 - 1005
- 8:13 - 1005
- 8:13 - 1005
- 8:13 - 1005
效果不错。原来只需要用双引号将字符串包起来,放到print中就可以了,真的是很简单。
如果想去掉$2与$1之间的空格怎么办呢?
- awk '{print $2"-"$1}' arr.dat
上面的程序输出结果:
- 7:26-1034
- 7:27-1025
- 7:32-1101
- 7:45-1006
- 7:46-1012
- 7:49-1028
- 7:51-1051
- 7:57-1029
- 7:59-1042
- 8:01-1008
- 8:05-1052
- 8:12-1005
- 8:13-1005
- 8:13-1005
- 8:13-1005
可以看到"-"前后的空格没有了,实际上,在awk中变量是可以直接连接的,比如:
- awk '{print $1$2}' arr.dat
这会输出如下的结果:
- 10347:26
- 10257:27
- 11017:32
- 10067:45
- 10127:46
- 10287:49
- 10517:51
- 10297:57
- 10427:59
- 10088:01
- 10528:05
- 10058:12
- 10058:13
- 10058:13
- 10058:13
$1和$2的域会紧挨着输出,这一点与php和js是不一样的,php中变量要连接字符串需要用".",在js中需要用"+",这里需要注意。
如果$1与$2之前有一个逗号,比如:
- awk '{print $1,$2}' arr.dat
则会在域中加上默认的域分隔符(空格),结果如下:
- 1034 7:26
- 1025 7:27
- 1101 7:32
- 1006 7:45
- 1012 7:46
- 1028 7:49
- 1051 7:51
- 1029 7:57
- 1042 7:59
- 1008 8:01
- 1052 8:05
- 1005 8:12
- 1005 8:13
- 1005 8:13
- 1005 8:13
本文转自 ustb80 51CTO博客,原文链接:http://blog.51cto.com/ustb80/1032393,如需转载请自行联系原作者