现在的位置: 首页 > 综合 > 正文

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

2013年02月01日 ⁄ 综合 ⁄ 共 1244字 ⁄ 字号 评论关闭

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开始)语言非常类似。另外,可以给命令添加信息头或信息尾,或两者都加,两者中不一定就只是为了输出,可以设置一些值等,它们就是普通语句,只不过执行的位置特殊点。在信息头中可以声明一些变量,从而可以在接下来的执行语句中使用。

注意:

  • {print $1,$2}会在第一个数据域和第二个数据域中添加OFS(输出域分隔符,awk内置变量会有介绍)。
  • 如果忘了添加文件,那么会默认以标准输入作为内容来源,ctrl+D代表输入内容结束。
  • 为了防止语法错误,应该保证:
  1. command用单引号括起来。
  2. 命令内所有引号成对出现。
  3. 确保用花括号括起全部动作,用圆括号括起全部条件语句。

     

    条件语句

    如果要使用正则,用/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 "\""}'可用来输入双引号

    抱歉!评论已关闭.