您的位置:首页 > 其它

数据处理工具之awk

2014-07-05 14:20 225 查看
1.awk是以行为一次处理的单位,而以字段为最小的处理单位。

2.awk命令的格式

awk '条件类型1{动作1} 条件类型2{动作2} ...' filename

备注,awk可以同时处理多个文件,比如可以使用通配符来指定多个文件,eg: testfile*

eg. last -n 5 | awk '{print $1 "\t" $3}'

eg. grep -o -P '(?<=ItemsCount:)\d+' apache.log | awk 'BEGIN{sum=0;} {sum=sum+$1} END{print sum/NR}'

eg. cat stat.log | awk '$2<=25000{a++} $2>25000&&$2<=30000{b++} $2>30000{c++} END{print "item<=25000: "a"\n""25000<item<=3000: "b"\n""item>30000: "c}'

eg. cat stat.log | awk 'BEGIN{OFS="_"} {print $1,$2,$3}' #那么awk输出的$1,$2,$3之间的分割符就是下划线,注意这里面$1,$2,$3之间的逗号是必须的。

3.awk中几个常见的变量

$0:表示一整行。

$n:表示第n列。

NF:每一行拥有的字段的总数。

NR:目前awk所处理的是第几行数据。

FS:目前的字段分隔字符,默认是空格键。

OFS:awk处理完之后的输出行中各字段的分隔符,默认为空格符。

RS:行记录间的分割符,默认为\n

ORS:awk处理完之后的输出行中各行的分隔符。

FILENAME:awk当前正在处理的文件的文件名。

另外awk命令中还有BEGIN,END关键字。

4.awk中调整分割符的两种方法

(1)cat /etc/passwd | awk 'BEGIN {FS=":"} $3<10 {print $1 "\t" $3}'

(2)cat /etc/passwd | awk -F ‘:’ '$3<10 {print $1 "\t" $3}'

(3)echo "aaaaa:bbbbbbbb;cccccc:ddddddd" | awk -F ':|;' '{print $1,$2,$3,$4}' #-F可以指定多个分割符,中间用|分割,|符号前后的字符都将作为awk分割符

备注:cat /etc/passwd | awk '{FS=":"} $3<10 {print $1 "\t" $3}'是不行的,因为第一行的内容将不会以:进行分割。因为awk的处理流程是这样的,读入待处理文本的第一行,然后在判断条件类型。

5.将awk执行动作放入到一个文件中

形式为:awk –f program_scripts inputfile
这样可以把处理操作放到program_scripts文件中。
在program_scripts中,格式是模式{动作}
pattern1{
action1

}
……
pattern n{
action n

}

如果第一个模式名为BEGIN,最后一个模式名为END.
那么,表示的含义如下:
任何在BEGIN中包含的动作action将在Unix awk开始扫描输入之前执行,而END中包含的动作action将在扫描完全部的输入之后执行。因此,通常使用BEGIN来显示变量和预置(初始化)变量,使用END来输出最终结果。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: