一。深入讨论awk
1.记录和域,模式和动作,正则表达式和元字符(在文本过滤那节有讲)
2.条件操作符
<小于
>=大于等于
<=小于等于
==等于
!=不等于
~匹配正则表达式
!~不匹配正则表达式
#!/bin/bash
#awkif
echo "210-219网段的访问量:`awk '{if($1~/^21[0-9]/) print $0}' | wc -l`"
3.awk内置变量
ARGC命令行参数个数
ARGV命令行参数排列
ENVIRON支持队列中系统环境变量的使用
FILENAMEawk浏览的文件名
FNR浏览文件的记录数
FS设置输入域分隔符,等价于命令行-F选项
NF浏览记录的域个数
NR已读的记录数
OFS输出域分隔符
ORS输出记录分隔符
RS控制记录分隔符
grade.txt
89#senior
75#junior
87#senior
82#senior
52#junior
awk -F '#' '{print NF,NR,ENVION["USER"],FILENAME,ARGC,ARGV[1],$0}' grade.txt
4.字符串函数
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 -F '#' '{if (gsub("#","||")) print $0}' grade.txt
gsub("s","S",$2)
5.转义字符
\b 退格键
\t tab键
\f走纸换页
\ddd八进制值
\n新行
\c任意其他特殊字符(如\\)
\r回车键
awk -F '#' '{print (index($2,"s")),"\t",$2}' grade.txt
6.printf修饰符
%cASCII字符
%d整数
%f浮点数
%e浮点数,科学计数法
%f新行
%gawk决定使用哪种浮点数转换e或者f
%o八进制数
%s字符串
%x十六进制数
awk -f '#' '{printf "%c%d\n",$1,$1}' grade.txt
7.awk数组
awk 'BEGIN {print split("as#qw#1234",array2,"#")}'
awk 'BEGIN {split("as#qw#1234",array2,"#");print array2[1]}'
#!/bin/bash
#awk_array.h
BEGIN{
FS="#"
score["0-60"]=0
score["60-70"]=0
score["70-80"]=0
score["80-90"]=0
score["90-100"]=0
student["junior"]=0
student["senior"]=0
}
{
{if($1<60)
score["0-60"]++}
{if($1<=70&&$1>60)
score["60-70"]++}
{if($1<=80&&$1>70)
score["70-80"]++}
{if($1<=90&&$1>80)
score["80-90"]++}
{if($1<=100&&$!>90)
score["90-100"]++}
}
{
for(senior_junior in student)
{if($2==senor_junior)
student[senior_junior]++}
}
END {
{for (number in score) print "the score",number,"has",score[number],"student"}
{for (senior_junior in student) print "the class has",
student[senior_junior],senior_junior,"student"}
}
./awk_array.sh grade.txt
二。深入讨论<<
#!/bin/bash
loopvar=2
main_menu()
{
echo
echo
dis_mainmenu="create minisite in china.com"
curdate=`date "+%Y-%m-%d %T"`
cat<
_____________________________________
_____________________________________
DATE:$curdate
_____________________________________
$dis_mainmenu
______________________________________
______________________________________
** 1)add minisite account
2)add domain in china.com
3)add database in mysql
4)add host in apache
5)backup minisite
6)delete minisite
7)exit
____________________________________
____________________________________
mayday
}
while [ $loopvar -gt 0 ]
do
main_menu
echo -n "please choose[1-7]:"
read main_choise
case $main_choice in
7)exit;;
*)clear
continue;;
esac
done
阅读(794) | 评论(0) | 转发(0) |