SHELL [awk]

   awk   

最基本功能是在文件或字符串中基于制定规则浏览和抽取信息。

完整的awk脚本通常用来格式化文本文件中的信息。

[1]命令行方式

awk [-F field-separator] 'commands' input-file(s)

awk -F : 'commands' input-file

[2] 将awk命令插入一个文件,并使awk程序可执行

[3] 将所有awk命令插入一个单独文件,然后调用

awk -f awk-script-file input-files(s)

awk '{print $0}' grade.txt    只有工作部分,没有模式部分

awk '{print $1,$4}' grade.txt   只打印部分域

awk 'BEGIN {print "Name         Belt\n---------------------------------"}     打印信息头

{print $1"\t"$4}'  grade.txt

awk 'BEGIN {print "Name         Belt\n---------------------------------"}     打印信息尾

{print $1"\t"$4} END {“end-of-report”}'  grade.txt

正则表达式与操作

匹配,使用符号 ‘~’ 后紧跟正则表达式

awk '{if($4~/Brown/) print $0}' grade.txt

awk '$0 ~ /Brown/' grade.txt

精确匹配

awk '{if($3=="48") print $0}' grade.txt

不匹配

awk '$0 !~ /Brown/' grade.txt

awk ‘$4 != “Brown-2” {print $0}’ grade.txt

<     >     <=     >=

awk '$1 ~ /^...a/' grade.txt        前三个字符任意,第四个为a

awk '$0~/(Yellow|Brown)' grade.txt

awk '/^48/' grade.txt

&&   ||    !

   内置变量   

awk 'END {print NR}' grade.txt  

awk '{print NF, NR, $0} END{print FILENAME}' grade.txt

NF浏览记录的域个数,NR 已读的记录数 

awk '{if( NR>0 && $4~/Brown/) print $0}' grade.txt

echo $PWD | awk -F/ '{print $NF}'   以/划分,显示文件名

设置域到域变量名

awk '{name=$1;belts=$4; if(belts ~ /Yellow/) print name " is belts" belts}'  grade.txt

awk 'BEGIN{BASELINE="27  " if($6<BASELINE) print $0}' grade.txt

修改数值域取值

awk '$6=$6-1; print $1,$6,$7' grade.txt

修改文本域
awk '$1="J.L.Troll"; print $1' grade.txt

新建输出域

awk '$8=$7-$6; print $1,$8' grade.txt

awk 'diff=$7-$8; print diff' grade.txt

增加列值

awk '(tot+=$6); END{print "Club student total points :" tot}' grade.txt

文件长度相加

awk ' /^[^d]]  {print $9"\t"$5} {tot+=$5} END {print "total KB:" tot}'

       内置的字符串函数     

gsub(/目标模式/, /替换模式/)    用s替代r

gsub(r,s)

gsub(r,s,t)  在t中,用s替代r

awk 'gsub(/4842/, 4899) {print $0}' grade.txt

index(s,t)    s中出现t的第一个位置

awk 'BEGIN {print index("Bunny", "ny")}' grade.txt

length(s) 所需字符串的长度

awk '{print length($1) " "$1}' grade.txt

match(s,r) 测试目标字符串是否包含查找字符的一部分,返回首个位置

awk 'BEGIN { print match("ABCD", /C/)}'

split(s,a,fs) 在fs上将s分成序列a

awk 'BEGIN {print split("1234#567#89", myarray, "#")} END{ for( i in myarray){print myarray[i]}}'

substr(s,p,n)返回字符串s中从p开始长度为n的后缀部分

awk '{print substr($1,3)}' grade.txt

awk '{print substr($1,1,5)}' grade.txt

管道将值传入awk

echo "" | awk {...}

     输出函数    

字符转换,格式输出,向一行命令awk传值

echo "65" | awk '{printf "%c\n", $0}'              A                          c  ASCII字符

awk 'BEGIN {printf "%f\n", 999}'                   999.000000       f   浮点数

awk '{printf "%-15s %s\n", $1,$3}' grade.txt        -左对齐      s  字符串

awk 命令变量=输入文件值

awk 'if($5<AGE) print $0' AGE=10 grade.txt

awk脚本文件
awk '$6=$6-1; print $1,$6,$7' grade.txt
awk '$6=$6-1; print $1,$6,$7' grade.txt
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值