|
一、awk概述
grep、sed与awk,俗称Linux下的三剑客,它们之间有很多相似点,但是同样也各有各的特色。
相似的地方:它们都可以匹配文本,逐行读取数据,支持正则表达式
其中只有sed可以编辑源文件
而awk则是一门模式匹配的编程语言,因为它的主要功能是用于匹配文本并格式化输出,同时它有一些编程语言才有的语法,例如函数、分支循环语句、变量等等
awk:报告生成器,格式化打印
基于列的文本工具,按行读取文本并视为一条记录,每条记录以指定分割符分割成若干字段,然后输出各字段的值。
内部支持变量、条件判断、循环、数组
awk --> new awk --> nawk(收费)
GNU awk --> gawk
二、awk的使用
注意:
awk和默认以任意个空白符为分隔符,而cut默认以制表符为分隔符,而且只能指定以一个字符为分隔符。
与sed一样使用‘’不要使用""容易报错
awk只支持ERE,且默认不支持{m,n}加选项 -- posix或者-- re-interval才支持,不支持反向引用:\1,\2,、、、,&等
用法格式:
awk [OPTIONS] 'SCRIPT' FILE...
awk [OPTIONS] 'pattern/{action}' File...
1、OPTIONS:
-F:指定输入文本时所使用的字段分隔符
-v:自定义变量
2、pattern
包括地址定界:
/pat1/,/pat2/
/pattern/
!/pattern/
expression: 表达式如:>,=, output-file
print items >> output-file
print items | command
特殊文件描述符:
/dev/stdin:标准输入
/dev/sdtout: 标准输出
/dev/stderr: 错误输出
/dev/fd/N: 某特定文件描述符,如/dev/stdin就相当于/dev/fd/0;
[root@localhost ~]# awk -F: '/root/{printf "%-10s:%s\n",$1,$3}' /etc/passwd > /dev/null
[root@localhost ~]# awk -F: '/root/{printf "%-10s",$1 > /dev/null}' /etc/passw
8、awk的操作符
算术操作符:
-x: 负值
+x: 转换为数值;
x^y:
x**y: 次方
x*y: 乘法
x/y:除法
x+y:
x-y:
x%y:
字符串操作符:
只有一个,而且不用写出来,用于实现字符串连接;(空格)
赋值操作符:
=
+=
-=
*=
/=
%=
^=
**=
++
--
注意:如果模式自身是=号,此时使用/=/可能会有语法错误,应以/[=]/替代
比较操作符:
<
>=
==
!=
~:模式匹配,左边的字符串能够被右边的模式所匹配为真,否则为假;
!~:
逻辑操作符
&&:与
||:或
布尔值
awk中,任何非0值或非空字符串都为真,反之就为假;(和bash的命令执行状态返回值刚好相反)
|
|
|