1.深入讨论(awk、<<)
    1.1.深入讨论awk
        记录和域,模式和动作,正则表达式和元字符
            基础教程中已经介绍
        条件和逻辑操作符
            <    小于
            >=    大于等于
            <=    小于等于
            ==    等于
            !=    不等于
            ~    匹配正则表达式
            !~    不匹配正则表达式
            
            &&    and
            ||    or
            !    not
            
            例子(注释:www.log是apache的一个日志文件,这是在日常生活中很常遇见的)

#!/bin/bash
echo "210-219网段的访问量是:`awk '{if ($1~/^21[0-9]/) print $0}' www.log | wc -l`"
echo "非210-219网段的访问量是:`awk '{if ($1!~/^21[0-9]/) print $0}' www.log | wc -l`"
echo "2004年07月07日的访问量是:`awk '{if ($4~/^\[07\/Jul\/2004/) print $0}' www.log | wc -l`"
echo "2004年07月07日/htm/free_call.php的访问量是:`awk '{if ($4~/^\[07\/Jul\/2004/) print $0}' www.log | awk '{if ($7=="/htm/free_call.php") print $0}' | wc -l`"

awk内置变量
            内置变量
                ARGC        命令行参数个数
                ARGV        命令行参数排列,是一个数组,用ARGV[0]、ARGV[1]……的方式
                ENVIRON        支持队列中系统环境变量的使用
                FILENAME    awk浏览的文件名
                FNR            浏览文件的记录数
                FS            设置输入域分隔符,等价于命令行参数-F选项
                NF            浏览记录的域个数
                NR            已读的记录数
                OFS            输出域分隔符
                ORS            输出记录分隔符
                RS            控制记录分隔符
            例子:
                awk -F '#' '{print NF,NR,$0}' grade.txt
                awk -F '#' '{print NF,NR,ENVIRON["USER"],$0}' grade.txt
                awk -F '#' '{print NF,NR,ENVIRON["USER"],$0,FILENAME}' grade.txt
                awk -F '#' '{print NF,NR,ENVIRON["USER"],$0,FILENAME,ARGC}' grade.txt
                awk -F '#' '{print NF,NR,ENVIRON["USER"],$0,FILENAME,ARGC,ARGV[0]}' grade.txt
                补充:grade.txt文件内容
                    85#senior
                    87#junior
                    75#senior
                    79#senior
                    92#senior
                    23#junior
        内置的字符串函数
            内置字符串函数
                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
                awk -F '#' '{if (gsub("s","S",$1)) print $0}' grade.txt
                awk -F '#' '{print (index($2,"e"))}' grade.txt
        awk转义字符
            转义字符
                \b        退格键
                \t        tab键
                \f        走纸换页
                \ddd    八进制值
                \n        新行
                \c        任意其他特殊字符,例如\\为反斜线符号
                \r        回车键
            例子
                awk -F '#' '{print (index($2,"s")),"\t",$2}' grade.txt
                awk -F '#' '{print (index($2,"s")),"\n",$2}' grade.txt
        printf修饰符,类似于C语言的printf函数
            printf修饰符
                %c    ASCII字符
                %d    整数
                %f    浮点数,例如(123.44)
                %e    浮点数,科学计数法
                %f    新行
                %g    awk决定使用哪种浮点数转换e或者f
                %o    八进制数
                %s    字符串
                %x    十六进制数
            例子
                awk -F '#' '{printf "%c\n",$1}' grade.txt
                awk -F '#' '{printf "%c\t%d\n",$1,$1}' grade.txt
                awk -F '#' '{printf "%c\t%f\t%d\n",$1,$1,$1}' grade.txt
        awk数组
            简介
                awk数组下标是从 1 而不是 0 开始
            例子
                awk 'BEGIN {print split("as#qw#1234",array2,"#")}'
                awk 'BEGIN {print split("as#qw#1234",array2,"#"); print array2[1]}'
                awk 'BEGIN {print split("as#qw#1234",array2,"#"); print array2[1],"\t",array2[2],"\t",array2[3]}'
            awk的脚本例子(awk_array.sh 文件)
                执行命令./awk_array.sh grade.txt

#!/bin/awk -f
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 ] && [ $1>=90 ]
score["90-100"]++
}
}
{
for senior_junior in student
{
if [ $2==senior_junior ]
student[senior_junior]++
}
}
END{
for number in score
print "The score",number,"has",score[number],"students"
}
{
for senior_junior in student
print "The class has",student[senior_junior],senior_junior,"stuents"
}
}

1.2.深入讨论<<

Linux Shell 高级编程技巧1----深入讨论(awk、<<)的更多相关文章

  1. Linux Shell 高级编程技巧4----几个常用的shell脚本例子

    4.几个常用的shell脚本例子    4.0.在写脚本(同样适用在编程的时候),最好写好完善的注释    4.1.kill_processes.sh(一个杀死进程的脚本) #!/bin/bash c ...

  2. Linux Shell 高级编程技巧3----运行级别脚本介绍

    3.运行级别脚本介绍    3.1.运行级别        运行级别介绍:            0    关机            1    单用户模式            2    多用户模式 ...

  3. Linux Shell 高级编程技巧2----shell工具

    2.shell工具    2.1.日志文件        简介            创建日志文件是很重要的,记录了重要的信息.一旦出现错误,这些信息对于我们排错是非常有用的:监控的信息也可以记录到日 ...

  4. Shell高级编程视频教程-跟着老男孩一步步学习Shell高级编程实战视频教程

    Shell高级编程视频教程-跟着老男孩一步步学习Shell高级编程实战视频教程 教程简介: 本教程共71节,主要介绍了shell的相关知识教程,如shell编程需要的基础知识储备.shell脚本概念介 ...

  5. 跟着老男孩一步步学习Shell高级编程实战

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://oldboy.blog.51cto.com/2561410/1264627 本sh ...

  6. (转)跟着老男孩一步步学习Shell高级编程实战

    原文:http://oldboy.blog.51cto.com/2561410/1264627/  跟着老男孩一步步学习Shell高级编程实战 原创作品,允许转载,转载时请务必以超链接形式标明文章 原 ...

  7. Linux环境高级编程--介绍

    从今天開始.将开启Linux环境高级编程(Advanced Programming Of Linux Enviroment)的学习笔记或者说总结,我将持续和大家分享自己的学习成果.本系列博客依托于li ...

  8. Linux C高级编程——文件操作之系统调用

    Linux C高级编程文件操作之系统调用 宗旨:技术的学习是有限的,分享的精神是无限的.           库函数是一些完毕特定功能的函数.一般由某个标准组织制作公布,并形成一定的标准.使用库函数编 ...

  9. [libgdx游戏开发教程]使用Libgdx进行游戏开发(11)-高级编程技巧 Box2d和Shader

    高级编程技巧只是相对的,其实主要是讲物理模拟和着色器程序的使用. 本章主要讲解利用Box2D并用它来实现萝卜雨,然后是使用单色着色器shader让画面呈现单色状态:http://files.cnblo ...

随机推荐

  1. Sqli-LABS通关笔录-7[文件写入函数Outfile]

    该关卡最主要的就是想要我们学习到Outfile函数(文件写入函数)的使用. 通过源代码我们很容易的写出了payload.倘若我们一个个去尝试的话,说实话,不容易. http://127.0.0.1/s ...

  2. STM32F103ZET6 用定时器级联方式输出特定数目的PWM(转载)

    STM32F103ZET6里共有8个定时器,其中高级定时器有TIM1-TIM5.TIM8,共6个.这里需要使用定时器的级联功能,ST的RM0008 REV12的P388和P399页上有说明对于特定的定 ...

  3. (原创)在service中定时执行网络操作的几点说明

    执行网络操作是耗时操作,即便是在service中也要放到子线程中执行 这里我用到了async-http-client框架来执行异步请求操作 计时用的java原生Timer和TimerTask类 本来这 ...

  4. 极客DIY:如何用Siri与树莓派“交互”

    苹果在2014年推出的HomeKit智能家居平台的确给人眼前一亮的感觉.随着时间的推移,国外的黑客对HomeKit该逆向的逆向,结果也都汇总到了git.本着折腾到死的极客心态,从网上淘了一块树莓派进行 ...

  5. CentOS6.5安装Tab增强版:bash-completion

    CentOS6.5安装Tab增强版:bash-completion,可补全命令参数: 因为CentOS官方源并不带有bash-completion的包,所以,为了可用yum安装,增加epel的源, 首 ...

  6. C++中的结构体

    http://zhidao.baidu.com/link?url=8OYQSKV9mvSBc6Hkf9NsLQmipSge9VCZDJQGAZZs5PCBQ54UTmK98VRmAklEEAFYu7d ...

  7. poj 2403

    http://poj.org/problem?id=2403 题意:就是给你m个单词,以及n段对话.每一个单词都有所对应的价值.求对话中的价值总和 题解:很简单,就是用单词和价值对应起来,然后再寻找就 ...

  8. 基础01 dos命令

    常见的dos命令: 盘符:        进入指定的盘下面. 操作文件夹:                   dir                                   列出当前控制 ...

  9. ABAP 内表的行列转换

    http://www.cnblogs.com/qlp1982/p/3370591.html

  10. pycharm的安装

    打开PyCharm官网http://www.jetbrains.com/pycharm/,选择Download,进入下载页面. 这时会出现2个版本,左边的那个是购买版,可以试用30天:右边那个是社区版 ...