今天来说Awk的使用,首先来介绍awk的工作原理。
Awk的工作原理:将文件1行1行读入,然后对每行再分段,段名称为$加上数字,分段根据是空格或Tab键。
用法:awk '/模式/{命令1;命令2;...}' filename
其中上面的模式没有的话就是对全文所有行进行操作,多条命令用分号隔开。
例如who命令结果以下
比如我们想得到日期,那末命令以下
awk默许分隔符为空格或Tab,有时候需要自己指定分隔符。比如
可以看出在/etc/passwd文件中,每行是用冒号隔开的,1共有7部份,如果想得到最后1部份的内容,那末需要指定分隔符,使用以下命令
F:表示以冒号作为分隔符。不过这是对所有行进行操作,有时候我们只需要指定1些行来操作。以下
表示只操作含有root的行。
上面用到了$符号,注意$0表示1行的所有内容。例如
那末假定我们有时候需要找某1列中含有特定字符串的行怎样办呢 ?比如
表示打印每行第1部份含有root的所有行。
Awk在把1行内容读入内存之前,可以先做1些其它的操作,具体格式以下
awk 'BEGIN{命令}/模式/{命令1;命令2;...}' filename
BEGIN{命令} 表示在读入当前行的数据之前,先履行BEGIN中的命令。
除输入时的分隔符,输出时也有分隔符,默许是空格,如果需要重新指定,那末用以下命令
除BEGIN,还有END操作符。以下命令
在开始处,我们学过,awk是把文件1行1行读入的,每行依照特定的字符分隔成很多段,那末我们怎样知道某1行是分成多少段呢? 那末就用NF这个变量。例如
表示who命令得到的文件每行分为5个字段。
除NF以外,还有NR,NR表示当前的处理行在源文件中是第几行。例如
除系统自带的变量外,如NF,NR,awk还可以自定义变量。例如
好了,到了这里,关于Awk的基本用法已就讲完了,每一个部份都需要深入理解才行,Mayuyu希望都能熟练应用。