@breakerthb
2017-02-20T02:46:49.000000Z
字数 1230
阅读 1308
Linux
Shell
数据处理工具
awk '条件类型1{动作1} 条件类型2{动作 2}...' filename
awk '{pattern + action}' {filenames}
支持管道操作
last -n 5 | awk '{print $1 "\t" $3}'
$0 表示所有列
$n 第n列
EG
awk '{print $0}' filename 打印全文
awk '{print $1}' filename 打印第1列
awk '{print $1,$3}' filename 打印第1列和第3列(中间以分隔符隔开)
匹配只对紧跟着的花括号起作用
EG
awk '/AL/ {print 2}' filename 打印有AL字段的第三列和第二列
awk '/AL/ {print 2}{print $4}' filename 不管找没找到都打印第四列
awk '/AL/' filename 不指定打印字段,全输出
$ awk '/AL/ {print $3,$2 ; print $4,$5}' filename 分两行打印
""中打印分隔符...
$ awk '/AL/ {print $3"-"$2"\n"}' filename
BEGIN {FS=" "}
awk -F "/" '{print $1}'
awk 'BEGIN {FS=":"} $3 < 10 {print $1 "\t" $3}'
CFG_PATH=path.cfg
for line in `cat $CFG_PATH`
do
#echo $line
name=`echo $line|awk -F= '{print $1}'`
path=`echo $line|awk -F= '{print $2}'`
done
gsub(r,s) 在整个$0中用s替代r;gsub(r,s,t) 在整个t中用s替代r
gsub函数有点类似于sed查找和替换。它允许替换一个字符串或字符为另一个字符串或字符,并以正则表达式的形式执行。第一个函数作用于记录$0,第二个gsub函数允许指定目标,然而,如果未指定目标,缺省为$0。
index(s,t):函数返回目标字符串s中查询字符串t的首位置。
length(s) :返回s长度
match(s,r): 测试s是否包含匹配r的字符串
split(s,a,fs) 在fs上将s分成序列a
sprint (fmt,exp) :函数类似于printf函数(以后涉及),返回基本输出格式fmt的结果字符串exp。
sub(r,s) 用$0中最左边最长的子串代替s
substr(s,p) 返回字符串s中从p开始的后缀部分
substr(s,p,n) 返回字符串s中从p开始长度为n的后缀部分。
match函数测试字符串s是否包含一个正则表达式r定义的匹配。
split使用域分隔符fs将字符串s划分为指定序列a。
awk '{if($4<300&&$5<300)print $1" "$2" "$3" "$4" "$5}'
NF 每一行拥有的字段总数
NR 当前行
FS 目前分隔符