awk连载1: awk的基本用法及原理
awk是一款很强大的文本处理工具,他把所要处理的字符串 按行 读入到内存进行分段处理。默认情况下是以空格或者tab作为分隔符,对每个分段都分配一个名字,第1部分用$1表示,第2部分用$2表示以此类推,整行内容用$0表示,具体如下图:
$1 |
$2 |
$3 |
... |
$N |
如果想对哪部分进行操作的话,直接用$n(n是数字)指定就可以了,这里的的操作一般是指print。
awk的基本语法:
awk ‘{print $n}’
举例如下:
对于一个字符串 my last name is duan 来说,使用awk对其操作的时候,首先会对这段字符进行分段如下:
my $1 |
last $2 |
name $3 |
is $4 |
duan $5 |
如果想打印name这个词,我们看到name是属于第三部分,只要打印$3即可:
如果想打印第1部分和第3部分,可以用逗号隔开:
这里用逗号隔开的话,显示的结果是空格进行连接,如果不用逗号的话,结果是连在一起的:
如果想指定连接符的话,需要单独指定连接符,用双引号指定分隔符,如下:
如果想打印整行内容的话,可以直接打印$0即可:
在用awk的时候,还可以先判断要处理的这行字符串里是否存在某关键字,如果存在才执行大括号里的操作,如果不存在则忽略,用法如下:
awk ‘/关键字/{print $n}’
如果含有duan这个关键字,才开始打印$3
如果含有duanxx才打印,如果不含有则不操作:
前面讲默认分段的分隔符是空格或者tab,如果使用其他的分隔符的话,需要使用-F来指定
这里$3所对应的值是 name,is-duan ,因为默认使用空格或者tab作为分隔符,如果想以-作为分隔符:
这里duan是第二部分,总共只有2部分,所以第一条并没有打印出来什么,第二条打印了duan。
如果以逗号作为分隔符:
打印的第二部分为is-duan。
如果想同时以-或者逗号作为分隔符呢?可以这样写:
这里第2部分就是is了。
如果想同时以空格 或者-或者逗号作为分隔符呢?可以这样写:
分隔符空格不能出现在[]里,注意上面的写法。