12shell_awk

Posted steven9898

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了12shell_awk相关的知识,希望对你有一定的参考价值。

AWK
awk 是一个优良的文本处理工具,其名字来源于三个开发人员的名字首字母缩写。
   awk 不但是一个优良的文件处理工作,它还可以自己编程,编写awk 程序
 
AWK基本格式:
     awk [option] ‘BEGIN......END...‘ [file]
 
option:
  -F   指定字段分隔符,如果出现在文件中的话,要用FS=
  -f file   指定命令文件
 
 
BEGIN...  起始段,里面的命令只执行一次且最先执行
 
...       主体,里面的命令,会执行多次,处理的文件有多少行,
      就执行多少次,相当于之前的循环体(多次执行)
 
END...    结束段,前面几段运行完后,再执行,里面的命令也只执行一次
 
AWK 使用方法:
    1、命令行
awk -F: ‘print $1‘ /etc/passwd
 
    2、命令文件
cat awk.cmd
  
         print $5 "‘s name is "$1","$5"‘s userid is "$3
  
 
awk -F: -f awk.cmd /etc/passwd
 
    3、用awk解释器
cat a1.awk
 
  #!/bin/awk -f
  
         print $5 "‘s name is "$1","$5"‘s userid is "$3
  
chmod 755 a1.awk
 
./a1.awk /etc/passwd
 
 
多条命令的执行:
    分号(;) 分隔
echo "My name is tom" | awk ‘$4="mary";print $0‘
My name is mary
 
AWK可以调用系统命令:
system (命令名)
 
AWK 变量
    AWK 有内置变量,也支持用户自定义变量
    内置变量:
$0 整行文本
$1 第一个字段
$2 第二个字段
$3 第三个字段
...
$NF 最后一个字段
NF 字段个数
NR 记录个数
 
    自定义变量
变量字母、数字、下划线组成,不能以数字开头,变量区分大小写
另:在awk 中,变量取值时,一般不要在前面加 $
 
如:
 
    自定义变量赋值的方法:
1、在脚本中(或命令行中)
   awk ‘BEGINt="abc+defg";print t‘
 
 
2、在awk外部(如shell提示符)
  cat awk.cmd
    
         print $n
 
    
 
  awk -F: -f awk.cmd -v  n=7  /etc/passwd
 
 
AWK使用正则表达式
AWK使用正则表达式,正则表达式要出现在 // 中
 
如:打印包含root的行的用户和shell
AWK匹配操作符:  ~
格式:~ /正则表达式/
 
或:
     ! ~ /正则表达式/
 
    例:打印以n开头的用户
awk -F: ‘/^n/print $0‘ /etc/passwd
 
awk -F: ‘$0 ~ /^n/ print $0‘ /etc/passwd
 
    例:打印用户id以1开头的行
awk -F: ‘$3 ~ /^1/print $1"   "$3"  "$7‘ /etc/passwd
 
 
 
例:显示每个用户的用户名和它的shell
awk -F: ‘print $1"             "$7‘ /etc/passwd
 
例:显示每个磁盘的设备名、挂载点和它的使用百分比
df -h | awk ‘printf("%-15s%-15s%-35s\n", $1,$6,$5)‘
 
 
另:awk中可以进行一些简单编程
    
    运算符:
数学运算符:
    >
    <
    >=
    <=
    ==
    !=
 
例:打印组id为0的用户
    awk -F: ‘$4=0print $0‘ /etc/passwd
    关系运算符:
    >
    <
    >=
    <=
    ==
    !=
    ~   
    !~
 
逻辑运算符
    ||
    &&
    !
 
AWK命令行中进行条件判断
条件放在command之前,不要if什么的(文件中要用if)
 
 
例:打印 用户id在10以内的用户名,id ,shell
 
 
AWK的流程控制:
    if (condition)
 
commands
 
    
 
    作用:判断condtion是否成立,成立执行commands
 
 
    if (condition)
 
commands1
 
    
    else
    
 
commands2
 
    
   作用:判断condtion是否成立,成立执行commands1,不成立执行commands2
 
 
    while ()
    
commands
    
  
 
 
 
    例:打印  /etc/passwd 偶数行
  awk ‘NR%2 == 0print $0‘ aa.txt
 
    例:用awk 统计一个文件的空行数
#!/bin/awk -f
BEGIN
        c=0
        if ($0 ~ /^ *$/)
                c=c+1
        
END
        print c
 
[root@t183 test]# ./a2.awk aa.txt
5
    例:awk求指定数的阶乘,数由调时给定
[root@t183 test]# cat a3.awk
BEGIN
         s=1
         while (n>1)   #n是由外部给定的求阶乘的数
        
                 s=s*n
                 n=n-1
        
         print s
 
[root@t183 test]# awk -f a3.awk -v n=5
     120
 
   练习:1、写一个日志分析程序,分析哪些ip访问过http服务器,
          什么时候访问的,访问的是什么页面
 
        2、修改主机名,把主机名固定到配置文件 /etc/sysconfig/network
           同时,将主机名和ip地址绑定到 /etc/hosts
 
   

以上是关于12shell_awk的主要内容,如果未能解决你的问题,请参考以下文章

12.1 LNMP架构介绍 12.2 MySQL安装 12.3/12.4 PHP安装 12.5 Nginx介绍

12.1LNMP架构介绍12.2 MySQL安装12.3/12.4 PHP安装12.5 Nginx介绍

十二周二次课 12.6 Nginx安装 12.7 默认虚拟主机 12.8 Nginx用户认证 12.

12.1 LNMP架构介绍12.2 MySQL安装12.3/12.4 PHP安装12.5 Nginx

12.6 Nginx安装 12.7 默认虚拟主机 12.8 Nginx用户认证 12.9 Nginx

高级特性(12)- 本地方法