Chinaunix首页 | 论坛 | 博客
  • 博客访问: 488856
  • 博文数量: 164
  • 博客积分: 4024
  • 博客等级: 上校
  • 技术积分: 1580
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-10 16:27
文章分类

全部博文(164)

文章存档

2011年(1)

2010年(108)

2009年(55)

我的朋友

分类:

2009-10-23 09:54:06

一。深入讨论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
阅读(803) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~