awk主要用来处理格式文本。现在将在工作中常用的一些方法做一下总结,以免忘记每次都要找书籍。
awk逐行扫描文件,从第一行开始直到最后一行,查找匹配某个特定模式的文本行,对这些文本行执行相应的(括在花括号中的)指定动作。
awk指令由模式和操作组成。操作是括在花括号中的一条或多条语句组成,语句之间用分号或换行符分隔。模式不能被括在花括号里面,它是由括在两个正斜杠之间的正则表达式或一到多个awk操作符组成。
1、常用的awk命令格式
$ awk 'pattern' file
$ awk '{action}' file
$ awk 'pattern {action} ' file
2、awk认为,输入的数据具有格式和结构,每一行被称作一个记录,以换行符终止。记录的分隔符保存在变量ORS和RS中,可以修改。
模式可以和操作结合使用,模式控制它后面的第一个左花括号到第一个右花括号之间的操作。
3、一些常用模式
1)匹配操作符:~用于对记录或字段的表达式匹配
$awk '$1 ~ /[Bb]ill/ ' file
2)范围模式
范围模式先匹配从第一个模式的首次出现到第二个模式的首次出现之间的内容,然后在匹配第一个模式的下一次出现到第二个模式的下一次出现,依此类推。
$awk ‘/Tom/,/Suzanne/ ’ file
$awk 'NR==2,NR==5 {PRINT $0}' file //答应第二到第五行的内容
3)next语句:next语句从输入文件中取出下一行输入,从awk脚本顶部从新开始
{
if($1 ~ /Pert/){next}
else {print}
}
4、awk 中的数组
awk中的数组是关联数组,下标既可以是数字也可以使字符串,awk根据使用环境来决定类型,并赋予初始值0或则空字符串。
$ awk '{name[x++] = $2};END{for (i = 0;i < NR;i++) print i,name[i] }' file
在上面的一行命令中,出现了变量x,首次出现时,系统初始化为0,还出现了数组,awk一会将它初始化为空字符串。
特殊的for循环:有时候数组的下标是字符串或者是非连续的数字时,将无法使用一般的for循环来遍历数字。这时候使用特殊的for循环。
for (item in arrayname){
state;
}
例如文件中每行还有一个字符串,现在需要统计文件中每个字符串的个数,就可以使用数组来很容易的实现。
$awk '{count[$0]++};END{for(item in count)print item,count[item]}' file
5、数组与split函数
split函数能够将字符串才分为此,然后保存在数组里面,用户可以指定拆分分隔符,默认使用FS。
格式:split(string,array,fiedseparator)
split(string,array)
6、delete函数:delete函数用于删除数组元素