一.调用awk方式
1. 命令行方式awk [-F filed-separator] ‘commands’ input-files
2. 将所有awk命令插入一个文件,并使awk程序可执行
3. 将所有awk命令插入一个单独文件,调用:
awk –f awk-script-file input-files
二.保存输出
1. $ awk ‘{print $0}’ grade.txt >wow 直接将结果重定向到wow
2. $ awk ‘{print $0}’ grade.txt | tee grade1.txt 将结果重定向到grade1.txt同时打印到屏幕上
三.输入
四.打印
1.$ awk ‘{print $0}’ grade.txt 打印所有记录
2.$ awk ‘{print $1,$4}’ grade.txt 打印单独(第一域和第四域)
3.$ awk ‘BEGIN {print “Name/n-------------”} {print $1,$4}’ grade.txt 打印报告头
4.$ awk ‘BEGIN {print “Name/n-------------”} {print $1,$4} END {“end of report”}’ grade.txt 打印信息尾
五.条件操作符
1.$ awk ‘$0 ~/Brown/’ grade.txt 匹配模式Brown,并打印匹配行
2.$ awk ‘{if($3 ~/48/) print $0}’ grade.txt在第三域中精确匹配48,并返回记录
3.$ awk ‘$0 !~/Brown/’ grade.txt 不匹配模式Brown,并打印匹配行
4.$ awk ‘{if ($6<$7) print $0 “$1 Try better at the next comp”}’ grade.txt 小于
5.$ awk ‘{if ($6>=$7) print $1 ”}’ grade.txt 大于等于
6.$ awk ‘/[Gg]reen/’ grade.txt 设置大小写
7.$ awk ‘$1 ~/^…a/’ grade.txt 抽取名字,为任意字符
8.$ awk ‘$0 ~/(Yellow | Brown)/’ grade.txt 或关系匹配,抽取Yellow或Brown的记录
9.$ awk ‘{if ($1==”A” && $4==”B”) print $0}’ grade.txt AND操作
10.$ awk ‘{if ($1==” Yellow” || $4~/ Brown/) print $0}’ grade.txt OR操作
六.内置变量
1.$ awk ‘END {print NR}’ grade.txt NR打印记录个数
2.$ awk ‘{print NF,NR,$0}’ grade.txt NF显示每条记录有多少个域
七.操作符
1.$ awk ‘{name=$1;belts=$4;if (belts ~/Yellow/) print name “is belt” belts}’ grade.txt 设置域名操作:name=$1;belts=$4
2.$ awk ‘{if ($6<27) print $0}’ grade.txt 域值比较操作$6<27
3.$ awk ‘BEGIN {BASELINE=”27”} {if ($6<BASELINE) print $0}’ grade.txt 给数字赋予变量名,意义同上
4.$ awk ‘{if ($1==”M.Tansley”) $6=$6-1;print $0}’ grade.txt 修改域数值
5.$ awk ‘{if ($1==”M.Tansley”) {$1=” M.M.Tansley” ;print $1}}’ grade.txt
6.$ awk ‘BEGIN {print “Name/t Difference”} {if ($6<$7) {$8=$7-$6;print $1,$8}}’ grade.txt 创建新输出域$8
7.$ awk ‘{(tot+=$6)};END{print “total points:” tot}’ grade.txt 将$6域的值相加并输出结果
八.内置字符串
字符串函数 | 含义 | 举例 |
gsub(r,s) | 在整个$0中用s替代r | $ awk ‘gsub(/4842/,4899) {print $0}’ grade.txt |
gsub(r,s,t) | 在整个t中用s替代r |
|
index(s,t) | 返回s中字符串t的第一个位置 | $ awk ‘BEGIN {print index(“Bunny”,”ny”)}’ grade.txt |
length(s) | 返回s长度 | $ awk ‘$1==”J.Troll” {print length($1)’ $1}’ grade.txt |
match(s,r) | 测试s是否包含匹配r的字符串 | $ awk ‘$1==”J.Lulu”’ {print match($1,”u”)} grade.txt |
split(s,a,fs) | 在fs上将s分成序列a | $ awk ‘BEGIN {print split(“12#45”,myarray.”#”)}’ grade.txt |
sprint(fmt,exp) | 返回经fmt格式化后的exp |
|
sub(r,s) | 用$0中最左边最长的子串代替s |
|
substr(s,p) | 返回字符串s中从p开始的后缀部分 | $ awk ‘$1==”L.Tansley” {print substr($1,3)}’ grade.txt |
substr(s,p,n) | 返回字符串s中从p开始长度为n的后缀部分 | $ awk ‘$1==”L.Tansley” {print substr($1,1,5)}’ grade.txt |