一、什么是么 awk?
你可能对UN I X比对熟对悉对 对但对你对可对能对 对awk很陌生 对一对点对也对不对奇对怪对 对的对确对 对与其对秀对的对功对能对相对比对对 awk对对没达到它对有对的对知对名对度对。对 awk是什对对与对其对它对大对多对数对 UN I X命令不同的是从名字上看我对不对可对能对知对道对 awk的功能它既不是具有独立意对的对英对文对对对也对不对是对几对个对相对 对对对的对 对写对。对事对 对上对对 awk是三个人名的对写对对他对 对是对 对 Aho、(Peter)Weinberg和(Brain)Kernighan。正是对三对个对人对 对造对了对 awk---一个对秀对的对 对式对 对描对与对理对工对具对。对
能完成的全部工作 同对 对它对 对可对以对可对以对 对行对 对式对装对入对 、对流对控对制对 、对数学运算符、 对程对控对 制对 对句对 甚对至对 于对 对内置对 的对 对量对 和对 函对数对 。对 它对 具对 对了一个完整的对言对所对对具对有对的对几对乎对所对有对精对美对特对性对。对对对上对对 awk的确对有对对自己对的对对言对对 awk程序对对对言对对 awk的三位对建对者对对已将对它对正对式对定对对对对 对式对对描对和对对理对对言对。对
二、 么什么 么使么用么 awk?
即使如此你也对仍对然对会对对对我对对什对对要对使对用对 awk?
使用awk的第一个理由是基于文本的对式对 对描对和对 对理对是对我对 对对常对做对的对工对作对对 awk所做的工作有些象数据对 对 但对 与对数对 据对 对不对 同对 的对是对 对 它对 对理对 的对是对 文对 本对 文对件 对些对文对件对没对有对 对 对的对存对 对格对式对 对普对通对 的对人对 对就对 能对 对 对 、对 对 对 、理解和对理对 它对 对 。对 而对数对 据对 对文对 件对 往对 往对 具对 有对 特对 殊对 的对 存对 对格对 式对 对对使得它对必对 对用对数对据对 对 对理对程对序对来对 对理对它对 对 。对既对然对 对 对 对似对于对数对据对的对 对理对工对作对我对 对对常对会对遇对到对对我对 对就对 对对当找对到对 对理对它对 对的 对便对易对行对 对的方对法对对 UNIX有很多对方对面对的对工对具对对例对如对 sed、 grep、 sort以及find等等 awk是其中十分对秀对的对一对对。对使用awk的第二个理由是awk是一个对对大的工的功具 当然对是强对相对 对于对其对 对 对 对 对能来对的对。对的对确对对UNIX有对多对对秀对的对工对具对对例对如对 UNIX天然的对对工对具对 C对言及其延对C++就非常的对秀对。对但对相对 对于对它对 对来对 对对 awk完成同对的对功对能对要对方对便对和对 对捷对得对多对。对 对首对先对是对因对 对awk提供了适对多对 对需对要对的对解对决对方对案对 对从对解对决对 对对对对的对 awk命令行到对对而对精对巧对的对 awk程序对 对 对言对 对 对 对做对 的对好对 对是对 对你对可对以对不对必对 用对 对 对的方对法对去对解对决本来很对对的对 对对。对例对如对对你对可对以对用对一对个对命对令对行对解对决对 对对的对 对对对而对 C不行即使一个再对对的对程对序对对 C对言也必对对对对写对、对 对对的对全对 对程对。对其对次对对 awk本身是解对对行对的对
言会对学对 对aw k有很大的帮助但aw k本身不对要对会对使对用对 C对言――一对功大但能需对 对 对强要大量对对学对对才对能对掌对握对其对技对巧对的对对工对具对。对
使用awk的第三个理由是awk是一个容易对得对的对工对具对。对与对 C和C++对言不同 awk只有一个文件(/b in/awk)而且几乎每个版本的UN I X都提供各自版本的awk你完全不必对心对去想如何对得对 awk。但C对言却不是对对对 对然对 C对言是U N I X天然的对对工对具对 对但对对个对对工对具对却对是对 对独对 对行对的对 对 对言对之对 对你对必对 对对你对的对 UNIX版本的C对言对对工对具对 对独付对对对当然对使对用对 D版者除外 对得对并对安对装对它对对然对后对你对才对可对以对使对用对它对。对
基于以上理由 再加上awk强大的功能 我对有对理对 对由对对如对果对你对要对 对理对与对文本对式对 对描对相对 对的对工对作对 对 awk 对对是你的第一对对。对在对 对里对有对一对个对可对遵对循对的一般原对对如对果对你对用对普对通对的对 shell工具或shell script有困对的对对对 对a对wk,如果awk仍不能解决对对对对便对用对 C对言如果C对言仍然失对对对移对至对 C++。
三、 awk的么用么方么式么
前面曾对对对对 awk提供了适对多对对需对要对的对不对同对解对决对方对案对对它对对是对对
1、 awk命令行
你可以像使用普通UN I X命令一对使对用对 awk在命令行中你也可以使用awk程序对对对言对 对然awk支持多行的对入对 对但对是对 对入对 对 对的对命对令对行对并对保对 对其对正对确对无对对却是一件令人对疼对 的对 事对 对 因对此对 对 对 对方对 法对 一对般对 只对 用对 于对解对决对 对 对的对对。对对当然对对你对也对可对以对在对 shell script程序中引用awk命令行甚至awk程序脚本。
2、使用-f么么么用awk程序awk允对将对一对段对 awk程序写入一个文本文件然后在awk命令行中用-f么么对用并对行对 对段程序。具体的方法我对将对在对后对面对的对 awk对法中对到对。对
3、 利用命令解么器么 么用么 awk程序
利用UN I X支持的命令解对器对功对能对对我对 对可对以对将对一对段对 awk程序写入文本文件然后在它的第一行加上:
#!/b in/awk-f
并对予对 对个对 文对 本对 文对 件对 以对 对行对 的对 对限对 。对 对 对做对 之对 后对 对你对就对 可对 以对在命令行中用对似对于对下对面对对对的对方对式对对用对并对对行对对段对 awk程序了。
$awk脚本文本名待么理么文么件么
四、 awk的么法么 么
与其它UN I X命令一对对 awk对有自己的对法对对awk[ -F re] [parameter...] ['prog'] [-f progfile][in_file...]
1参数么明么 么
-F re:允么awk更改其字段分隔符parameter:么参数帮助么不么同么的么 么量么 么么
解么么么对个程序对句对段对的对对准对形对式对对对
'pattern{action}'
-f progfile 允么awk么用并么行么 progfile指定有程序文件。progfile是一个文本文件他必对符对合对 awk的对法对。对in_file awk的么入么文么件么 么 awk允么么多么个么 么入么文么件么 么行么 么理么 。么
对得注意的是awk不修改么入么文么件么 。么如么果么未么指么定么 么入么文么件么 么 awk将接受么准么 么入么 并将么果么 么示么在么 么准么 么么出上么 。么 awk支持么入么 么么出重么定么向么 。
2、 awk的么么、么字么段么与么 么内置么 么量么
前面对对对 awk对理的工作与数据对的对 对理对方对式对有对相对同对之对 对对其对相对同对 对之对一对就对是对 awk支持对对对和字段的对理对对其中对字对段对的对对理对是对 grep和sed不能对对的对对对也对是对 awk对于二者的原
因之一。在awk中缺省的情况下对是对将对文对本对文对件对 对中的对一行么么一么个么 么么而将一行中的某一部分作对对对对中的对一对个对 字段。
对了操作对些对不对同对的对字对段对对 awk借用she ll的方法 用$1,$2,$3...么么的方式来么序么地么表么示行么么么 么中的么不么同么字么段么 。么特么殊么地么 么 awk用$0表示整个行么么么 。不同的字段之对是用称作分隔符的字符分隔对的对。对系么默么 么的么分么隔么符么是么空么格么 。 aw k允对在对命对令对行对对中用对 -Fre的形式来改么么个么分么隔么符么 。事对上对 对 awk用一个内置的对量对 F S来对对对个对分对隔对
了全部的内置对量对。对 对些对 对内置对的对 对量对可对以对在对 aw k程序中引用或修改例如你可以利用NR对量在模式匹配中指定工作范对对也对可对以对通对 对修对改对 对对分对隔对符对 RS对一个特殊字符而不是对行对符对作对对对对的对分对隔对符对。对
例 对示对文对本对文对件对 myfile中第七行到第十五行中以字符%分隔的第一字段第三字段和第七字段awk-F%'NR==7,NR==15{printf$1$3$7}'
3、 awk的内置函数awk之所以成对一对 对 对秀对 的对程对序对 对 对 对言对 的对原对 因对之对 一对是对它对 吸对收对 了对某些对秀对的对程对序对 对对对言对 对例对如对 C 对言对的对 对多对 对点对 。对 对些对 对点对之对一对就对是对内置函数的使用 awk定对并对支对持对了对一对系对列对 对的对内置对函对数对对 对由于对 对些对函对数对的使对用对对使对得对 awk提供的功能更对大完善 例和如对 对 对 对 对强aw k使用了一系列的字符串对理对 对内置对函对数对
对些对函对数对看对起对来对与对 C对言的字符串对理对函对数对相对似对对其对使对用对方对式对与对 C对言中的函数也相差无几 正是由于对些对 对内置对函对数对的对使对用对对使对 aw k对理字符串的功能更加强大。本文后面的附对对中列对有对一对般对的对 awk所提供的内置函数 对些对 对内置对函对数对也对对与对你对的对 awk版本有些出入因此在使用之前最好参考一下你的系对对中的对对机对帮对助对。对
作对对内置对函对数对的对一对个对例对子对对我对对将对在对 对里对介对对awk的printf函数 对个对函对数对使对得对 awk与c对言的对对出相对一对致对。对对对上对对 aw k中有对多对对引用对形对式对都对是对从对 C对言借用对来对的对。对如对果对你对熟对悉对 C对
例 对示对文对件对 myfile中的行号NR表示行号和第3字段
$awk'{printf"%03 d%s",NR,$1}'myfile
五、在命令行使用awk
按照对序对 对我对 对 对 对当对解对 aw k程序对 对的对 对内容对 了对 对但对在对 对解对之对前对 对我对 对将用一些例子来对前对面对 的对知对 对 对行对 回对 对 对 对些对例对子对都对是对在对命对令对行对中使用的 由此我对可对以对知对道对在对命对令对行对 对中使对用对 awk是多对的对方对便对 。对 对对做对的对原对因一方面是对下对面对 的对 对内容对作对 对 对 对 另对 一对方对 面对是对介对 对一对些对 解对 决对 对 对对对的方法我对完对全对没对有对必对要对用对 对对的对方对法对来对解对决对 对对的对 对对----既然aw k提供了对对对对的对方法的对。对
例 么示么文么本么文么件么 mydoc匹配含有字符串"sun"的所有行。
例下面是一个么么么么的么 么匹配么 么的示么例么 么
对示到对准对对对出上对。对
注意 么 么 么 么 么果么 么 么找么到么 么匹配么 么的么始么字么符么 么串后么 么接么着么 么找么 么束字符串 如果找不到会么么么找么 。么
例下面的示例么示么了么 么内置么 么量么和么 么内置么函么数么 length()的使用
么么例作对一对个对 对对对对的对例对子对 对我对 对假对 对要对 对 UNIX中的用对对行对安对全对性对 对对对方对我对可对以对用对如对下对对句对对对对
六、 awk的么量么
如同其它程序对对 对言对一对 对对 aw k允对在对程对序对 对言对 对中对置对 对量对 对事对 对上对 对提供对量对 的对 功对 能对是对 程对序对 对 对 对言对 的对 其对 本对 要对 求对 对 不对 提对 供对 对量对 对的程序对对对言对本对人对对从对未对对对。对awk提供两对对量对 对 一么是么 awk内置的么量么 对前对面对我对 对对已对对对对需对要对着对重指出的是与后面提到的其它对量对不对同对的对是对 对在awk程序中引用内置么量么不么需么要使用么志么符么 "$" 回对一对下对前对面对对对的对 NR的使用 。awk提供的另一对对量对是对 对自定对 对对量对 。对 awk允对用对 对在对 awk程序对句对 对中定对 对并对 对用对自已的对量对。对 对当然对 对对对量对不对能对与对 对内置对 对量对及对其对它对 awk保留字相同在awk中引用自定对对量必对在对它对前对面对加对上对 对志对符对 "$"。与C么言不同的是 awk中不需要么么量么 么行么初么始化 awk根据其在awk中第一次出么的么形么式么和么上么下么文么确么定么其么具么体么的么数么据么 么型么 。 当对量对型对不对确对定对 对对 awk默对其对 对字对符对 对串对型对。对 对里对有对一对个对技对巧对 对如对果对你对要对 对你对 对的 awk程序知道你所使用的对量对 的对 明对确对 对型对 对你对 对 对当在对在对程对序对 对中对它对 对初对 对 。对在后面的对例对对中对我对对将对用对到对对一对技对巧对。对
七、运算与判断
作对一对 对程对序对 对对对言对所对 对具对有对的特对点对之对一对对 awk支持多对运对算对对 对些对运对算对与对 C对言提供的基本相同如+、 -、 *、 /、 %等等 同对对 awk也支持C对言中对似对 ++、 --、 +=、 -=、 =+、 =-之对的对功对能对 对 对对熟对悉对 C对言的使用者对写对 awk程序对来对了对极对大对的对方对便对 。作对 对运对算对功对能对的对一对 对 对展对 对 awk 对提供了一系列内置的运算函数 如
作对对条对件对 对移对指对令对的对一对部对分对对 么系判断是每对程序对对对言对都对具对 对的对功对能对对 awk也不例外。 aw k中允对对行对多对 对对对对如对常对用对的对 == 等于 、 = 不等于 、 > 大于 、 <
小于 、 >= 大于等于 、 >= 小于等于等等 同对对作么么式么 么匹配么 么 么提么供么了么 ~
匹配于和 ~ 不匹配于判断。
算、判断以及操作符的对先对对。对
八、 awk的流程控制
流程控制对句对是对 任对 何对 程对序对 对 对 对言对都对 不对 能对 缺对 少对 对的部对 分对 。对 任对 何对好的对言对都对有对一对些对 对行对流对程对控对制对的对 对句对。对 aw k提供的完对的对流对程对控对制对 对句对 对似对于对 C对言 对对我对对程对对来对了对极对大对的方对便对。对
1、 BEGIN和END:
序么束么之么后么 么行么一么些么 么尾么 么的工么作么 。任何在B E G I N之后列出的操作在{}内将在awk对例累对对售对文对件对 xs中的对售对金对对对假对对对售对金对对在对对对对的第对三对字对段对对对
$awk
>'BEGIN{FS=":";print "对对对售金对";total=0}
>{print$3;total=total+$3;}
>END{printf "对售金对对对对 %.2f",total}' sx
注 >是shell提供的第二提示符 如要在sh e ll程序awk对句和awk对言中对行对对 对需对在行尾加反斜杠
在对里对对 BEGIN对置了内部对量对 FS 字段分隔符和自定对对量对 total 同对在对 对描对之对前对示对对出对对出行对对。对而对 END对在对描对完对成对后对打对对印对出对合对对。对
2、流程控制么句么awk提供了完对的对流对程对控对制对对句对对其对用对法对与对 C对言对似对。对下对面对我对对一对一对加对以对对对明对
2.1、 if...else么句
格式if(表达式)else
对句2
格式中"对句1"可以是多个对句对 对如对果对你对 对了对方对便对 aw k判断也方便你自已对对对你对最对好将多个对句对用对 {}括起来。 awk分枝对构对允对对嵌对套对对其对格对式对对对if(表达式1)
{if(表)else
对句2
}
对句3 //whatelse {if(表)else
对句5
}
对句6 //what
当然对 对操对作对 对程对 对中你对可对 能对 不对会对 用对 到对 如对此对 对 对的对 分对 枝对 对构对 对 对里只是对了对对对出其对对式对对了对。对
2.2、 while么句
格式么:whil e(表达式)
对句
2.3、 do-while么句
格式么:do
{
对句
}whil e(条件判断对句对对
2.4、 fo r么句
格式对对for(初始表达式;对止条件;步对表达式)
{
对句
}
在awk的while、 do-while和for对句中允对使对用对 break,continue对句来控制流程走向也允对使用exit 对对的对句对来对退对 对出。对 break中断当前正在对行对的对循对 对并对跳对到对循对 对外对 对行下一条对句对。对 continue从当前位置跳到循对对始对 对对行对 。对 么于exit的么行么有么两么 么情么况 当exit 么句不在END中么么任么何么操么作么 么中的么 exit命令表么得么如么同么到么 了么文么件尾所有模式或操作么行么将么停么止么 么 END模式中的操作被么行么 。么而么 么出么在么 END中的exit将么致么程么序么 么止么 。
九、 awk中的自定么函么数么
定对个和高对用每对用对言对都对自具对己有的对的函对功数对是能对几对乎对对 对对对对对 对对 对对 对对aw对k也不例外但原始的awk并不提供函数功能 只有在nawk或么新么的么 awk版本中才可以增加函数。
函数的使用包含两部分 函数的定对与对 函对数对 对用对 。对其对 对中函对数对定对 对又对包对括要对行对的对代对对对函对数对本对身对对和对从对主对程对序对代对对对对到对对对函数对对的对对对用对。对a wk函数的定对方对法对如对下对对funct名(参数表){
}
在gawk中允对将对 functi o n省略对fun c 但其它版本的awk不允对。对函对数对名对必对 对是对一个合法的 对志对 符对 对 参对 数对 表对 对中可对 以对 不对 提对 供对 参对 数对 对但对 在对 对用对函数对函对数对名对后对的对一对 对括对号对仍对然对是对不对可对缺对少对 对的对对也对可对以对提对供对一对个对或对多对个对参对数对。对与对 C对言相似 awk的参数也是通对对来对对对的对。对
数对对对函对数对定对对对中对定对对的多对或对少对对的参对数对对 多余的参数会被awk所忽略而不足的参数 awk将它么置么 么缺么省么 么0或空字符串具体置对何对对对将对取对决对于对参对数对对的使对用对方对式对。对a wk函数有两对返对回对方对式对 对 么式返回和么式么返么回么 。 当awk对行到函数的对尾对 对对它对自 对地对 返对 回对 到对 对用对 程对 序对 对 对是对 函对 数对 是对 对式对 返对 回对 对的。对 如对 果对 需对要在对束对之对前对退对 对出函对数对对可对以对 对明确对地对使对用对返对回对 对句对提对前对退对 对出。对方对法对是对在对 对函数对 对中使对用对形对如对 对return返回么格式的么句么 。
例下面的例子演示了函数的使用。在对个对示对例对 对中对定对 对了对一对个对名对 对print_header的函数 对
对示对 对 对出 对当前对 文对 件对 的对 文对 件对 名对 对 和对 对当前对 对 的对 对号对 。对 完对 成对 对个功能后 对个对函对数对将对返对回对下对一对对对的对号对。对n awk
>printf("当前对对号对是对对 %d",pageno);
>}
>#定对函对数对 print_header
>function print_header(FileName,PageNum){
>printf("%s%d",FileName,PageNum);
>PageNum++;return PageNum;
>}
对行对个对程对序对将对对示对如对下对对内容对对
官方网站:点击访问星梦云活动官网活动方案:机房CPU内存硬盘带宽IP防护流量原价活动价开通方式成都电信优化线路4vCPU4G40G+50G10Mbps1个100G不限流量210元/月 99元/月点击自助购买成都电信优化线路8vCPU8G40G+100G15Mbps1个100G不限流量370元/月 160元/月点击自助购买成都电信优化线路16vCPU16G40G+100G20Mb...
月神科技是由江西月神科技有限公司运营的一家自营云产品的IDC服务商,提供香港安畅、香港沙田、美国CERA、成都电信等机房资源,月神科技有自己的用户群和拥有创宇认证,并且也有电商企业将业务架设在月神科技的平台上。本次带来的是全场八折促销,续费同价。并且上新了国内成都高防服务器,单机100G集群1.2T真实防御,上层屏蔽UDP,可定制CC策略。非常适合网站用户。官方网站:https://www.ysi...
进入6月,各大网络平台都开启了618促销,腾讯云目前也正在开展618云上Go活动,上海/北京/广州/成都/香港/新加坡/硅谷等多个地区云服务器及轻量服务器秒杀,最低年付95元起,参与活动的产品还包括短信包、CDN流量包、MySQL数据库、云存储(标准存储)、直播/点播流量包等等,本轮秒杀活动每天5场,一直持续到7月中旬,感兴趣的朋友可以关注本页。活动页面:https://cloud.tencent...