awk动物

$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   

猜你喜欢

转载自houshangxiao.iteye.com/blog/2090271
awk
今日推荐