awk简单用法

Posted losbyday

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了awk简单用法相关的知识,希望对你有一定的参考价值。

awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。

awk有3个不同版本: awk、nawk和gawk,未作特别说明,一般指gawk,gawk 是 AWK 的 GNU 版本。

1、域分割符
awk 在没有使用-F 指定分割符的时候。默认以空格为分割符。
域分割 $0代表文本内容全文显示
$1 代表分割第一个域
$2 代表分割第二个域
依次类推....
awk -F: 分割符号为\':\'
# cat /etc/passwd | awk -F: \'{print $1,$2,}\'

2、域和记录
awk执行时浏览域标记为$1,$2...$n,这种方法称为域的标识

(1)、抽取域
# cat /etc/passwd | awk -F: \'{print $1}\'

(2)、$0代表所有记录
# cat /etc/passwd | awk -F \'{print $0}\'

(3)、单独打印记录
# cat /etc/passwd | awk -F: \'{print $1,$4}\'

(4)、打印报告头
# cat /etc/passwd | awk -F: \'BEGIN{print "This is system user"}{print $1}\' | more

(5)
、打印信息尾
# cat /etc/passwd | awk -F: \'BEGIN{print "This is system user"}{print $1}END{"print =================="}\' | more

#cat passwd  | awk -F: \'BEGIN{print "===================:"}{print "User Name: "$1}END{print "======================="}\'

3、awk中的正则表达式

(1)、匹配~
# cat /etc/passwd |awk \'{if($1~/root/) print $0}\'

# cat /etc/passwd | awk \'$0~/root/\'

(2)、精确匹配
# cat /etc/passwd | awk -F: \'$1=="root"{print $0}\'

(3)、不匹配
# cat /etc/passwd | awk \'$0 !~ /root/\'
# cat /etc/passwd |awk \'{if($1!~/root/) print $0}\'
 
(4)、小于
# cat /etc/passwd | awk -F: \'{if($3<200)print $3}\'

(5)、小于或等于
# cat /etc/passwd | awk -F: \'{if($3<=200)print $3}\'   

(6)、大于或者等于
# cat /etc/passwd | awk -F: \'{if($3>500)print $3}\'   
# cat /etc/passwd | awk -F: \'{if($3>=500)print $3}\'

(7)、匹配多个关键字
# cat /etc/passwd | awk -F: \'$1~/(root|user)/\'

(8)、匹配行首
# cat /etc/passwd | awk -F: \'$1~/^root/\'

(9)、 awk 使用 && ||

# cat /etc/passwd | awk -F: \'{if($1=="root" && $5=="root") print $0}\'
# cat /etc/passwd | awk -F: \'{if($1=="root" || $1=="sfsdfdsfds") print $0}\'

4、awk NF和NR
(1)NF和NR,$NF打印域最后
NF 浏览记录的域个数(统计列的段数)
NR 已读的记录数(记录列行号)
# cat /etc/passwd | awk -F: \'{print NF}\'
# cat /etc/passwd | awk -F: \'{print NF,NR}\' 打印有几段并且输出每行的行号
# awk \'{if(NR<10 && $1~/root/)print $1}\' /etc/passwd   行号小于10的,使用$1匹配root关键字
# cat /etc/passwd | awk -F: \'{print $NF}\'  打印每段的最后一段

5、AWK替换
gsub (r,s)在整个$0中用s替代r
# cat /etc/passwd | awk \'gsub(/root/,"losbyday") {print $1}\'  将root替换成losbyday

 

更多戳这里:

AWK用法入门详解 http://www.cnblogs.com/losbyday/p/5854707.html
awk命令详解二 :http://www.cnblogs.com/losbyday/p/5854725.html

以上是关于awk简单用法的主要内容,如果未能解决你的问题,请参考以下文章

awk简单用法

Linux中awk命令的简单用法

文本处理工具AWK简单用法案例

awk用法

性能测试日志分析之awk基础用法

awk 的一些用法