$0代替所有域
A.adust 01/99 78923 Afdadf 42 20 9
B.bdust 02/99 78923 Bfdadf 43 21 10
awk 'BEGIN{print "begin................."}{print $0}END{print "end....................."}' grad.txt
大括号内逻辑语句,含赋值等|前无括号判断 后大括号打印
~ 匹配正则表达式
!~ 不匹配正则表达式
{if($4~/Lfdadf/)print} 如果第四列含有Lfdadf就打印
awk '{if($6~/2/)print $0}' my.txt 第六列中含有2的话就打印
'$5=="66" {print}'打印五列等于66的
'$5 != "66" {print}'打印五列不为66的
'$0 !~ /Ufdadf/ {print}' 打印不匹配Ufdadf的
'/[Yy]dust/'
awk '$2 ~/^..3/' my.txt 第二域第三个字符是以3开头的
awk '$5 ~/(66|67)/' my.txt 第五域是66或者67
=============内置变量==============================
ARGC 命令行参数个数
ARGV 命令行参数排列
ENVIRON 支持队列中系统环境变量的使用
FILENAME awk浏览的文件名
FNR 浏览文件的记录数
FS 设置输入域分隔符,等价于命令行 -F选项
NF 浏览记录的域个数
NR 已读的记录数
OFS 输出域分隔符
ORS 输出记录分隔符
RS 控制记录分隔符
===================================================
awk '{print NR}'
echo `pwd` | awk -F/ '{print $5}'
==============内置的字符串函数=================================
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中最左边最长的子串代替 s
substr(s,p) 返回字符串 s中从p开始的后缀部分
substr(s,p,n) 返回字符串 s中从p开始长度为 n的后缀部分
==============================================================
awk 'gsub(/99/, 6666) {print $0}' my.log把所有的99替换为6666
awk 'BEGIN{print length("abc")}'
awk输出函数printf
echo "65" | awk '{printf "%c\n", $0}'
A
awk脚本文件
#!/bin/awk -f
hadoop@hadoop:$ pg a.log b.log c.log
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbbbbbbbb
cccccccccccccccccccccccccccccccc