您的位置:首页 > 运维架构 > Shell

awk初级使用-------shell学习(6)

2010-10-17 16:24 477 查看
awk三种使用方式:

    1.    awk [-F field-separator] ‘command’ file1 file2 …。field-separator必须用引号或双引号扩上。

    2.    将awk指令写入脚本中,并且指定执行该脚本的解析器为“#!/usr/bin/awk -f”,awk路径不同系统可能不一样。运行该脚本:test.awk file1 file2 …。

    3.    将awk指令写入脚本中,执行awk –f scripfile file1 file2 …。

awk每次在文件中读一行,找到域分隔符(若未制定-F,则默认为空格),设置其为域n(从1开始,$1,$2…$n,$0代表原文件中的行),直至一新行,然后,划分这一行作为一条记录,接着 awk再次启动下一行读进程。

awk语句语法规则和其它脚本(如js,但是没有其类的功能,而且数组下标从1开始)语言非常类似。另外,可以给命令添加信息头或信息尾,或两者都加,两者中不一定就只是为了输出,可以设置一些值等,它们就是普通语句,只不过执行的位置特殊点。在信息头中可以声明一些变量,从而可以在接下来的执行语句中使用。
$ awk –F ‘;’ ‘BEGIN {print “head”} {if($1==0) {$1=1; print $1”/t”$2}; print “nice”} END {print “end”}’ file


注意:

{print $1,$2}会在第一个数据域和第二个数据域中添加OFS(输出域分隔符,awk内置变量会有介绍)。
如果忘了添加文件,那么会默认以标准输入作为内容来源,ctrl+D代表输入内容结束。
为了防止语法错误,应该保证:

command用单引号括起来。
命令内所有引号成对出现。
确保用花括号括起全部动作,用圆括号括起全部条件语句。

 

条件语句

如果要使用正则,用/regex/形式,“~”表示匹配正则表达式,“!~”表示不匹配正则表达式(如$1 !~ /john/),其它变量比较操作使用>,>=,<,<=,==,!=,数据类型自动匹配。判断时,可以用if(compare),也可以直接compare或(compare),当然我推荐用if(compare),否则对于语法的记忆比较麻烦,容易出错。比较语句使用&&,||,!操作符,用法类似C语言。

 

 

 

awk内置变量



 

 

内置字符串函数

字符串都用””括起来,正则用//括起来。



 

printf用法和C类似,但是不需要加()。如printf “%d/n” a。

可以向awk命令传递值:awk ‘END {print AGE}’ AGE=10 file。

 

 

 

awk,sed,tr支持在匹配特殊字符时可直接使用ctrl+v, ctrl+?来匹配。

awk,tr还支持/X形式来匹配特殊字符。

grep不支持特殊字符查找。

awk -F '/t' 'BEGIN {count=0} {count+=$3} END {print count}' 进行累加

awk '{print "'\"'"}'可用来输入单引号

awk '{print "\""}'可用来输入双引号
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息