awk基本用法

来源:互联网 发布:js的splice 编辑:程序博客网 时间:2024/06/05 03:46

awk工作流程及基本使用

如果我想从一个文件当中获取一部分内容的话,那么我们就要利用到awk。awk可以从一个文本当中获取部分内容,或者对这个文本进行排版。

awk的工作过程是:它会把文件一行内容,读到内存里,然后对这行内容进行分段:

用法:awk '/范围/{命令1;命令2;......}' file,awk默认的分隔符是空格或者tab

用的比较多的命令print

-F:表示以冒号做个分隔符 显示第一块内容。$0表示整行内容。

刚才的命令是匹配root的,如果加上^匹配的是开头含有root。

这句命令的意思是查找第五部分含有root的,并打印第二部分。使用~可以表示匹配的意思。

awk实际上自带一个循环的。在第一行开始之前,实际上我们是可以先做一些准备工作的,也就是说,awk再把第一行读入到内存之前,可以先做其他的一些操作:

awk 'BEGIN{命令}/范围/{命令1;命令2;......}' file

 

刚才说了awk默认的分隔符是空格,这个分隔符使用的是FS这个变量:

这个命令的意思是在读取passwd这个文件之前,首先执行BEGIN里面的命令,BEGIN里面我们定义了一个变量FS。FS就是读取文件时默认的分隔符。

如果我们想输出多个部分的话,用逗号(,)隔开。当我们使用逗号隔开时,显示在屏幕上是以空格隔开的。

默认输出分隔符是空格,我如何更改输出分隔符?OFS

awk 'BEGIN{FS=":";OFS='/'} $1 ~ /root/{print $1,$2}' passwd

有BEGIN就会有END,END就是扫尾的意思。

awk 'BEGIN{命令}/范围/{命令1;命令2;......}END{命令}' file

当我们使用print的时候,print后面如果是变量名我们可以不使用双引号"",如果不是变量名的话,就必须使用""引起来。

 

 刚才我们已经说了2个变量FS,OFS。

NF:表示每行的字段数。

NR:表示awk所处理的这行内容在源文件当中是第几行:

这句命令显示了开头为root的那行内容在源文件当中是 第一行。

除了系统自带的这些变量之外,我们还可以自定义变量的:

该命令的意思是在循环passwd文件之前,定义了一个变量aa值为0,然后循环aa里面的内容,如果含有root的话,那么给变量aa加1。最终把所有的行全部读完之后,再执行END里面的命令。

注意:当我们引用变量的时候,是不加$的,这个和shell或者其他语言不一样。

0 0
原创粉丝点击