awk
awk是一种编程语言,对文本和数据进行处理,支持正则表达式,突出特点是对文本列的处理。
awk基本功能:在文件或字符串中基于指定规则来分解抽取信息,也可以基于指定规则来输出信息。
awk的调用方式
(1)
awk [option] 'awk_script' inputfile1 [inputfile2...]
选项:
-F fs 使用fs作为字段分隔符,默认为Space
-f filename 从文件中读取awk脚本
-v var=value 为awk_script设置变量
(2)将awk_script放入脚本文件,并以 !#/bin/awk –f 作为首行
(3)将所有awk_script写入到一个单独脚本文件,然后调用“awk –f awk脚本文件 输入文件列表”进行执行
记录和域
(1)域分隔符
域分隔符:默认为Tab。内置变量FS
输出域分隔符:默认为Space。内置变量OFS
修改方法:
awk –F '[:\t]' '{print $1,$3}' passwd
(2)记录:一行为一个记录
记录分隔符:默认为换行。内置变量ORS和RS
变量NR:计数器(记录行号)
例:
awk '{print NR,$0}' grade.txt
(3)域:一列为一个域
域标志顺序为$1,S2,…,$n。$0表示整条记录,$n表示第n列
域之间的分隔符默认为Space或Tab,可以使用-F参数修改。
例:
awk '{print $1,$3}' grade.txt
awk脚本
awk脚本由模式和操作组成。
awk命令的一般格式:
awk 'BEGIN {action}
awk_pattern1 {action}
awk_pattern2 {action}
awk_patternN {action}
END {action}'
inputfile
awk内置函数:
函数 | 函数说明 |
gsub(r,s) | 在整个$0中用s代替r |
gsub(r,s,t) | 在整个t中用s代替r |
index(s,t) | 返回s中字符串t的第一位置 |
length(s) | 返回s长度 |
match(s,r) | 测试s是否包含r字符串 |
Split(s,a,fs) | 用fs作为分隔符将s分成序列a |
sprint(fmt,exp) | 返回fmt格式化后的exp |
sub(r,s) | 用$0中最左边最长的r子串代替s |
substr(s,p) | 返回字符串s中p开始的后缀部分 |
substr(s,p,n) | 返回字符串s中p开始,长度为n的后缀部分 |
awk变量
(1)变量不需要定义可以直接使用
(2)awk赋值语句为“var=exp”
awk '$1 ~/test/{count=$2+$3;print count}' test
(3)域变量可被赋值和改变。
例如:awk ‘{$2=$1+100;print $2}’ test
(4)可以使用内置变量。
例如:awk ‘{if($1==”MARY”) {print NR,$1,$2,$NF}}’ test