awk文本处理工具

grep、sed和awk都是文本处理工具,虽然都是文本处理工具单却都有各自的优缺点,一种文本处理命令是不能被另一个完全替换的,否则也不会出现三个文本处理命令了。只不过,相比较而言,sed和awk功能更强大而已,且已独立成一种语言。

grep:文本过滤器,如果仅仅是过滤文本,可使用grep,其效率要比其他的高很多;


sed:Stream EDitor,流编辑器,默认只处理模式空间,不处理原数据,如果你处理的数据是针对行进行处理的,可以使用sed;

awk:报告生成器,格式化以后显示。如果对处理的数据需要生成报告之类的信息,或者你处理的数据是按列进行处理的,最好使用awk。

AWK是一种用于处理文本的编程语言工具。我们现在使用最多的是gawk,gawk是AWK的GNU版本。


使用格式:
# awk [options] '{print $1}'  file1, file2, ...


awk的输出:print
print
print的使用格式:
    print item1, item2, ...

要点
1、各项目之间使用逗号隔开,而输出时则以空格符分隔;
2、输出的item可以为字符串或数值、当前记录的字段(如$1)、变量或awk的表达式;数值会先转换为字符串,而后再输出;
3、print命令后面的item可以省略,此时其功能相当于print $0, 因此,如果想输出空白行,则需要使用print "";

awk脚本

awk脚本是由模式和操作组成的。

模式与操作

模式

模式可以是以下任意一种:

        正则表达式:使用通配符的扩展集

        关系表达式:使用运算符进行操作,可以是字符串或数字的比较测试

        模式匹配表达式:用运算符~(匹配)和~!不匹配

        BEGIN 语句块, pattern语句块, END语句块

操作

操作由一个或多个命令、函数、表达式组成,之间由换行符或分号隔开,并位于大刮号内,主要部分是:变量或数组赋值、输出命令、内置函数、控制流语句。


AWK内置变量

$n : 当前记录的第n个字段,比如n为1表示第一个字段,n为2表示第二个字段。

$0 : 这个变量包含执行过程中当前行的文本内容。

ARGC : 命令行参数的数目。

ARGIND : 命令行中当前文件的位置(从0开始算)。

ARGV : 包含命令行参数的数组。

CONVFMT : 数字转换格式(默认值为%.6g)。

ENVIRON : 环境变量关联数组。

ERRNO : 最后一个系统错误的描述。

FIELDWIDTHS : 字段宽度列表(用空格键分隔)。

FILENAME : 当前输入文件的名。

NR : 表示记录数,在执行过程中对应于当前的行号

FNR : 同NR :,但相对于当前文件。

FS : 字段分隔符(默认是任何空格)。

IGNORECASE : 如果为真,则进行忽略大小写的匹配。

NF : 表示字段数,在执行过程中对应于当前的字段数。 print $NF答应一行中最后一个字段

OFMT : 数字的输出格式(默认值是%.6g)。

OFS : 输出字段分隔符(默认值是一个空格)。

ORS : 输出记录分隔符(默认值是一个换行符)。

RS : 记录分隔符(默认是一个换行符)。

RSTART : 由match函数所匹配的字符串的第一个位置。

RLENGTH : 由match函数所匹配的字符串的长度。

SUBSEP : 数组下标分隔符(默认值是34)。


BEGIN:让用户指定在第一条输入记录被处理之前所发生的动作,通常可在这里设置全局变量。

[root@node1 ~]# awk -F : '{print $1,$7}' passwd 


awk 'BEGIN{OFS="#"} {print $1,$2}' ofs.txt 
#指定输出的分隔符
awk 'BEGIN{OFS="#"} {print $1,"hello",$2}' ofs.txt
#指定输出的分隔符并会在其中添加hello字符 
awk -F : -v OFS=# '{print $1,$7}' passwd 
#以:为字段分隔符,以#号为输出分隔符,显示该文件的第一及第七字段的值
awk '{print $NF}' ofs.txt 
#显示当前行的最后一个字段


[root@node1 ~]# ifconfig -a |grep ether | awk '{print $2}'
52:54:00:9f:76:c3
[root@node1 ~]# ifconfig -a | grep inet
        inet 10.141.113.216  netmask 255.255.192.0  broadcast 10.141.127.255
        inet 127.0.0.1  netmask 255.0.0.0
[root@node1 ~]# ifconfig -a |grep inet | awk '{print $2}'
10.141.113.216
127.0.0.1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值