sed以行为单位处理文件,awk比sed强的地方在于不仅能以行为单位,还能以列为单位处理文件。awk缺省的行分隔符是换行,缺省的列分隔符是连续的空格和Tab,但是行分隔符和列分隔符都可以自定义。
awk的基本用法和sed类似,awk命令行的基本形式为:
awk option 'script' file1 file2 ...
awk option -f scriptfile file1 file2 ...
和sed一样,awk处理的文件既可以由标准输入重定向得到,也可以当命令行参数传入。编辑命令可以直接当命令行参数传入,也可以用-f 参数指定一个脚本文件,编辑命令的格式为:
/pattern/{actions}
condition{actions}
和sed类似,pattern是正则表达式,actions是一系列操作。awk程序一行一行读出待处理文件,如果某一行与pattern匹配,或者满足condition条件,则执行相应的actions。若一条awk命令只有actions部分,则actions作用于待处理文件的每一行。
- 常见命令
(1)print命令
使用print命令输出符合正则表达式的结果行,这里的$0代表整条记录(行),那如何打印具体到列呢?
此时,$1,$2表示指定的域(列),一张图表示:
输出多个域时,print使用逗号作为分隔符。
(2)根据条件进行输出
(3)awk定制分隔符
awk默认按照空格作为分隔符,若想定制分隔符,常用的方法是使用-F 选项。
-F可以支持多种符号进行定制分隔符。
(4)BEGIN & END
BEGIN 和 END 是awk中两个极具特色的表达式,可以用它们做文本处理之前的准备工作、之后的收尾工具,基本格式如下:
BEGIN{ } /REG/{ } END{ }
BEGIN{ } condition{ } END{ }
任何在BEGIN之后列出的操作(在{ } 内)将在awk开始扫描输入之前执行,而END之后列出的操作将在扫描完全部的输入之后执行。因此,通常使用BEGIN来显示变量和初始化变量,使用END来输出最终结果。