AWK简介

来源:互联网 发布:商业会计的软件 编辑:程序博客网 时间:2024/05/16 06:09

AWK是一个很好的文本处理工具。下面把自己的学习内容和大家分享下。

①首先是变量内容:

FS:读取文本时的字段分隔符。

RS:输入文本时的记录换行符。

OFS:输出文本时的字段分隔符。

ORS:输出文本时的记录换行符。

NF:字段数量。(即一条记录中字段的个数)。

NR:单个文件中记录的个数,如果AWK后面参数跟了多个文件。那么这个数量是两个文件加起来的记录数量的总和。

FNR:文件中记录的数量。如果是单个文件,那么NR=FNR,如果输多个文件的话,FNR的数量当读到下一个文件的时候会重新计算。但是NR会一直累加。

②BEGIN 和END的介绍

BEGIN一般在用在读取第一行文本之前,相当于进行初始化或者是声明格式或者是变量。

例子:

awk  ‘BEGIN{TEST=”hello world”; print test}’

awk –F:‘BEGIN{“USERNAME,BASH”}  {pintf“%-20s%-20s\n”,$1,$7}’ /etc/passwd

END一般用在打印输出第一行文本之前。表示的是输入已经全部的读取完毕。

例子:

netstat –tan|awk ‘/^tcp/{state[$NF]++}END{for (s in state){print s,state[s]}}’

统计的是处在每个tcp连接状态的数量。

③在AWK中同样适用的是操作符,比如算数运算符,布尔,以及模式匹配。

X~Y 表示的是如果X能够匹配上Y的字符串。

X!~Y表示的是X不能够匹配上Y的字符串。

如果是模式匹配的话 我们/pattern/来表示。

④几个例子,在例子中统一的使用的是/etc/passwd这个文件为处理文件。

列出文件中默认的shell是bash的用户名和shell

awk –F:‘$7==”/bin/bash”{print $1,$7}’ /etc/passwd

列出每行中数量大于4的字段。

awk –F: ’{for(i=1;i<=$NF;i++) {if (length($i)>=4) print $i}}’ /etc/passwd

列出各种tcp连接状态的数量

netstat –tan|awk‘/^tcp/{state[$NF]++}END{for (s in state) print s,state[s]}’

 

 

0 0
原创粉丝点击