AIX下的AWK语言介绍


AIX下的AWK语言介绍
 
[plain]   www.2cto.com  
awk语言的最基本功能:在文本或字符串中给予指定规则浏览和抽取信息。  
awk抽取信息后,才能进行其他文本操作,完整的awk脚本通常用来格式化文本中的信息。  
  
三种调用awk的命令方式:  
1.命令行方式:awk [-F field-separator] 'commands' input-file(s)  
    -F选项可选:awk -F: 'commands' input-file  
2.将所有的awk命令插入一个文件,并是awk程序可执行,然后用awk命令解释器作为脚本的首行,  
    以便通过键入脚本名称来调用它。  
3.将所有的awk命令插入一个单独文件,然后调用:  
    awk -f awk-script-file input-files(s)  
    -f:指明在文件awk-script-file中的awk脚本  
    input-file(s):使用awk进行浏览的文件名。  
  
awk脚本  
在命令中调用awk时,awk脚本由各种操作和模式组成。  
-F,awk每次读一条记录或一行,并使用指定的分隔符分分隔指定域;  
所没分隔符,则使用空格。  
  
任何awk语句都由模式和动作组成  
模式,决定动作语句何时触发及触发事件,若忽略模式部分,动作将时刻保持执行状态。  
模式,可是任何条件语句,或符合语句,或正则表达式。  
BEGIN:设置计数,打印头,在任何文本浏览动作之前;  
END:用来在awk完成文件浏览动作后打印输出文件总数和结尾状态标志。  
  
动作,在{}内指定;大多用来打印;里面可包含:if,looping,循环推出结构;  
若不指明采取动作,awk将打印所有浏览出来的记录。  
  
例子:  
cat > grade.txt  
M.Tansley  05/99  48311  Green    8    40   44  
J.Lulu     06/99  48317  green    9    24   26  
P.Bunny    02/99  48     Yello    12   35   28  
J.Troll    07/99  4842   Brown-3  12   26   26  
L.Tansley  05/99  4712   Brown-2  12   30   28  
  
将awk输出的数据保存起来:  
1.awk '{print $0}' grade.txt > wow  
  pg wow  
  stuname    indate seqno  level    age  gnow gmax  
  M.Tansley  05/99  48311  Green    8    40   44  
  J.Lulu     06/99  48317  green    9    24   26  
  P.Bunny    02/99  48     Yello    12   35   28  
  J.Troll    07/99  4842   Brown-3  12   26   26  
  L.Tansley  05/99  4712   Brown-2  12   30   28  
2.使用tee命令,保存并且输出保存的数据到屏幕  
  [开发]/usr/b4nx/ytcclb>awk '{print $0}' grade.txt | tee delete_me_and_die  
  stuname    indate seqno  level    age  gnow gmax  
  M.Tansley  05/99  48311  Green    8    40   44  
  J.Lulu     06/99  48317  green    9    24   26  
  P.Bunny    02/99  48     Yello    12   35   28  
  J.Troll    07/99  4842   Brown-3  12   26   26  
  L.Tansley  05/99  4712   Brown-2  12   30   28  
  [开发]/usr/b4nx/ytcclb>pg delete_me_and_die  
  stuname    indate seqno  level    age  gnow gmax  
  M.Tansley  05/99  48311  Green    8    40   44  
  J.Lulu     06/99  48317  green    9    24   26  
  P.Bunny    02/99  48     Yello    12   35   28  
  J.Troll    07/99  4842   Brown-3  12   26   26  
  L.Tansley  05/99  4712   Brown-2  12   30   28  
  
打印所有数据  
awk '{print $0}' grade.txt  
  M.Tansley  05/99  48311  Green    8    40   44  
  J.Lulu     06/99  48317  green    9    24   26  
  P.Bunny    02/99  48     Yello    12   35   28  
  J.Troll    07/99  4842   Brown-3  12   26   26  
  L.Tansley  05/99  4712   Brown-2  12   30   28  
  
打印部分域数据  
awk '{print $1,$4}' grade.txt  
M.Tansley Green  
J.Lulu    green  
P.Bunny   Yello  
J.Troll   Brown-3  
L.Tansley Brown-2  
  
awk命令报错:  
awk '{print $1,&4}' wow  
awk: Syntax error  
 at line 1 of program << {print $1,&4} >>  
 context is  
        {print >>>  $1,& <<< 4}  
awk: illegal statement  
 at line 1 of program << {print $1,&4} >>  
错误原因:参数输入错误,&4换为$4  
  
打印报告头  
[开发]/usr/b4nx/ytcclb>awk 'BEGIN {print "Name      Belt\n------------"}  
> {print $1"\t"$4}' wow  
Name      Belt  
------------  
M.Tansley       Green  
J.Lulu          green  
P.Bunny         Yello  
J.Troll         Brown-3  
L.Tansley       Brown-2  
  
打印行尾  
报错:  
awk 'BEGIN {print "Name\n--------"} {print $1} END  
> {"end-of-report"}' wow  
awk: Syntax error  
 at line 2 of program << BEGIN {print "Name\n ... >>  
 context is  
        BEGIN {print "Name\n--------"} {print $1} END >>>  
 <<<  
awk: bailing out  
 at line 2 of program << BEGIN {print "Name\n ... >>  
原因:换行造成。  
awk 'BEGIN {print "Name\n--------"} {print $1} end {"end-of-report"}' wow  
Name  
--------  
M.Tansley  
J.Lulu  
P.Bunny  
J.Troll  
L.Tansley  
  
awk错误,查找  
1.确保整个awk命令用单引号括起来;  
2.确保命令内所有引号成对出现;  
3.确保用花括号括起动作语句,用圆括号括起条件语句;  
 

相关内容

    暂无相关文章