Linux初学者学习笔记

20170904 awk

2017-09-10  本文已影响268人  哈喽别样
  • awk介绍
  • awk变量
  • printf命令:实现格式化输出
  • 操作符
  • awk pattern
  • awk action
  • awk数组
  • awk函数
  • awk脚本

一、awk介绍

(一)awk的基本语法概念

awk [options] 'program' file…
awk [options] -f program_file file…

(二)awk的工作原理

(三)print语句

awk '{print "hello, awk"}'           //等待输入,每输入一条打印一次"hello, awk"
awk '{print}' /etc/passwd            //逐条打印/etc/passwd文件
awk '{print "wang"}' /etc/passwd     //每读入/etc/passwd文件一行,打印一次"wang"
awk -F: '{print $1}' /etc/passwd     //打印/etc/passwd文件以":"作为分隔符的第1列
awk -F: '{print $0}' /etc/passwd     //逐条打印/etc/passwd文件
awk -F: '{print $1,$3}' /etc/passwd  //打印以":"作为分隔符的第1列和第3列,以空格作为分隔符输出
awk -F: '{print $1"\t"$3}' /etc/passwd    //打印以":"作为分隔符的第1列和第3列,以制表符作为分隔符输出
tail -3 /etc/fstab | awk '{print $2,$4}'  //打印/etc/fstab文件最后3行以空格作为分隔符的第2列和第4列

二、awk变量

(一)内置变量

(二)自定义变量

echo '{print script,$1,$2}' > awkscript
awk -F: -f awkscript -v script="awk" /etc/passwd

三、printf命令:实现格式化输出

四、操作符

五、awk pattern

(一)正则表达式:/regular expression/

仅处理模式匹配到的行,需要用"/ /"括起来

(二)关系表达式:结果为“真”才会被处理

真:结果为非0值,非空字符串
假:结果为空字符串或0值

(三)行范围

/pat1/,/pat2/:支持使用正则表达式描述,不支持直接给出数字格式

(四)BEGIN/END模式

BEGIN{}:仅在开始处理文件中的文本之前执行一次
END{}:仅在文本处理完成之后执行一次

示例5-1:pattern中正则表达式和关系表达式的用法

示例5-2:pattern中行范围和BEGIN/END模式的用法

六、awk action

(一)awk控制语句:if-else

(二)awk控制语句:while循环

(三)awk控制语句:do-while循环

(四)awk控制语句:for循环

可以看出awk执行效率最高,bc次之,shell脚本的效率最差

(五)awk控制语句:switch, break, continue, next语句

七、awk数组

(一)awk数组的基本用法

(二)awk数组的遍历

八、awk函数

(一)数值处理:

(二)字符串处理:

(三)自定义函数:

function max(var1,var2) {
        var1>var2?maxnum=var1:maxnum=var2
        return maxnum
}
BEGIN {printf " max num is %d\n",max(a,b)}

执行命令,awx -f max.awx -v a=5 -v b=3,结果如下

(四)awk调用shell命令:system()

九、awk脚本

上一篇 下一篇

猜你喜欢

热点阅读