数据处理工具之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来输出最终结果。
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来输出最终结果。
相关文章推荐
- 经典的数据处理工具—awk
- awk 数据处理工具
- awk-好用的行级数据处理工具
- 正规表达式下 awk 数据处理工具的简单介绍
- linux中awk工具的使用
- 结合SQL*Loader、AWK工具为表构造大数据量,以备测试
- Linux下的sed工具及awk工具的使用
- awk 报表工具 【原创】
- awk工具---待完善
- Shell脚本编程与sed,awk工具的使用--9月15日课程作业
- linux文本分析工具awk解读
- awk---一个优秀的样式扫描与处理工具
- Linux工具之grep&&sed&&awk
- Linux报告生成器工具awk
- 详解Shell脚本:sed命令工具 ,awk命令工具
- awk工具使用
- awk工具
- 01 awk工具的使用
- linux字符处理工具tail, awk, grep
- 鸟哥的Linux私房菜 基础学习篇 第三版 第十二章 正则表达式与文件格式化处理 12.4.2 awk 好用的数据处理工具