• awk


    作业一:整理博客,内容包含awk、变量、运算符、if多分支

    awk

    语法
    awk [options] 'commands' files
    option
    -F 定义字段分隔符,默认的分隔符是连续的空格或制表符
    使用option中的-F参数定义间隔符号
    用$1,$2,$3等的顺序表示files中每行以间隔符号分隔的各列不同域
    NF变量表示当前记录的字段数
    -v 定义变量并赋值 也可以借用次方式从shell变量中引入

    command
    读前处理 行处理 读后处理
    1.读前处理 BEGIN{awk_cmd1;awk_cmd2}
    2.行处理:定址 命令
    定址方法: 正则,变量,比较和关系运算
    正则需要用//包围起来
    ^ 行首
    $ 行尾
    . 除了换行符以外的任意单个字符
    * 前导字符的零个或多个
    .* 所有字符
    [] 字符组内的任一字符
    [^] 对字符组内的每个字符取反(不匹配字符组内的每个字符)
    ^[^] 非字符组内的字符开头的行
    [a-z] 小写字母
    [A-Z] 大写字母
    [a-Z] 小写和大写字母
    [0-9] 数字
    < 单词头 单词一般以空格或特殊字符做分隔,连续的字符串被当做单词
    > 单词尾

    扩展正则 加 -r 参数 或转义
    sed -n '/roo?/p' /etc/passwd
    sed -rn '/roo?/p' /etc/passwd
    ? 前导字符零个或一个
    + 前导字符一个或多个
    abc|def abc或def
    a(bc|de)f abcf 或 adef
    x{m} x出现m次
    x{m,} x出现m次至多次(至少m次)
    x{m,n} x出现m次至n次

    NR变量定址
    NR 表示AWK读入的行数
    FNR表示读入行所在文件中的行数
    # awk '{print NR,FNR,$1}' file1 file2
    1 1 aaaaa
    2 2 bbbbb
    3 3 ccccc
    4 1 dddddd
    5 2 eeeeee
    6 3 ffffff
    #
    逻辑运算 可直接引用域进行运算
    == >= <= != > < ~ !~
    # awk 'NR==1 {print}' /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    #
    3.命令 {print $0}
    4.读后处理 END {awk_cmd1;awk_cmd2;}


    AWK变量
    NR 当前记录的个数(全部文件连接后的统计)
    FNR 当前记录的个数(仅为当前文件的统计,非全部)
    FS 字段分隔符 默认为连续空格或制表符,可以使用多个不同的符号做分隔符 -F[:/]
    OFS 输出字符的分隔符 默认是空格
    # awk -F: 'OFS="=====" {print $1,$2}' /etc/passwd
    root=====x
    NF 当前读入行的字段个数
    ORS 输出记录分隔符 默认是换行
    # awk -F: 'ORS="=====" {print $1,$2}' /etc/passwd
    root x=====bin x=====
    FILENAME 当前文件名

    引用shell变量的方法
    # a=root
    # awk -v var=$a -F: '$1 == var {print $0}' /etc/passwd
    或者 把整个命令拆开传递,让shell变量外露,
    # awk -F: '$1 == "'$a'" {print $0}' /etc/passwd
    # a=NF
    # awk -F: '{print $'$a'}' /etc/passwd

    操作符
    赋值
    = += -= /= *=
    逻辑与 逻辑或 逻辑非
    && || !
    匹配正则或不匹配,正则需要用 /正则/ 包围住
    ~ !~
    关系 比较字符串时要把字符串用双引号引起来
    < <= > >= != ==
    字段引用
    $ 字段引用需要加$,而变量引用直接用变量名取
    运算符
    + - * / % ++ --
    转义序列
    \ 自身
    $ 转义$
    制表符
     退格符
    回车符
    换行符
    c 取消换行

    作业二:awk文本处理
    打印uid在30~40范围内的用户名。
    [root@bogon ~]# awk -F: '$3>=30 && $3<=40{print $1,$3,$4}' /etc/passwd
    打印第5-10行的行号和用户名
    [root@bogon ~]# awk -F: 'NR>=5 && NR<=10{print NR,$1}' /etc/passwd
    5 lp
    6 sync
    7 shutdown
    8 halt
    9 mail
    10 operator

    打印奇数行
    [root@bogon ~]# awk 'NR%2' /etc/passwd或awk '{if (NR%2==1) print $0}' /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    games:x:12:100:games:/usr/games:/sbin/nologin
    nobody:x:99:99:Nobody:/:/sbin/nologin
    systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
    polkitd:x:998:996:User for polkitd:/:/sbin/nologin
    postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    chrony:x:997:995::/var/lib/chrony:/sbin/nologin
    tom:x:1001:1001::/home/tom:/bin/bash
    alex:x:1003:1003::/home/alex:/bin/bash

    打印偶数行
    [root@bogon ~]# awk '{if (NR%2==0) print $0}' /etc/passwd
    bin:x:1:1:bin:/bin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    sync:x:5:0:sync:/sbin:/bin/sync
    halt:x:7:0:halt:/sbin:/sbin/halt
    operator:x:11:0:operator:/root:/sbin/nologin
    ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    systemd-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin
    dbus:x:81:81:System message bus:/:/sbin/nologin
    tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
    sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    egon:x:1000:1000::/home/egon:/bin/bash
    bing:x:1002:1002::/home/bing:/bin/bash
    abcd:x:1004:1004::/home/abcd:/bin/bash

    打印字段数大于5的行
    [root@bogon ~]# awk -F: 'NF>5{print $0}' /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    sync:x:5:0:sync:/sbin:/bin/sync
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    halt:x:7:0:halt:/sbin:/sbin/halt
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    operator:x:11:0:operator:/root:/sbin/nologin
    games:x:12:100:games:/usr/games:/sbin/nologin
    ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    nobody:x:99:99:Nobody:/:/sbin/nologin
    systemd-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin
    systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
    dbus:x:81:81:System message bus:/:/sbin/nologin
    polkitd:x:998:996:User for polkitd:/:/sbin/nologin
    tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
    postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    chrony:x:997:995::/var/lib/chrony:/sbin/nologin
    egon:x:1000:1000::/home/egon:/bin/bash
    tom:x:1001:1001::/home/tom:/bin/bash
    bing:x:1002:1002::/home/bing:/bin/bash
    alex:x:1003:1003::/home/alex:/bin/bash
    abcd:x:1004:1004::/home/abcd:/bin/bash
    打印UID不等于GID的用户名
    [root@bogon ~]# awk -F: '$3!=$4{print $1,$3,$4}' /etc/passwd
    adm 3 4
    lp 4 7
    sync 5 0
    shutdown 6 0
    halt 7 0
    mail 8 12
    operator 11 0
    games 12 100
    ftp 14 50
    systemd-bus-proxy 999 997
    polkitd 998 996
    chrony 997 995

    打印没有指定shell的用户
    grep -v "/bin/bash$" /etc/passwd
    [root@bogon ~]# grep -v "/bin/bash$" /etc/passwd
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    sync:x:5:0:sync:/sbin:/bin/sync
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    halt:x:7:0:halt:/sbin:/sbin/halt
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    operator:x:11:0:operator:/root:/sbin/nologin
    games:x:12:100:games:/usr/games:/sbin/nologin
    ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    nobody:x:99:99:Nobody:/:/sbin/nologin
    systemd-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin
    systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
    dbus:x:81:81:System message bus:/:/sbin/nologin
    polkitd:x:998:996:User for polkitd:/:/sbin/nologin
    tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
    postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    chrony:x:997:995::/var/lib/chrony:/sbin/nologin

    作业三:shell脚本编写
    自动部署、初始配置、并启动nginx反向代理服务
    自动部署、初始配置、并启动三台web
    监控脚本:监控每台机器的内存使用率>70%,则输出报警信息
    (思路提示:
    [root@www ~]# ((80>70))
    [root@www ~]# echo $?
    0

  • 相关阅读:
    一个比喻理解进程和线程的区别
    python蛋疼的编码decode、encode、unicode、str、byte的问题都在这了
    python类中__unicode__和__str__方法的妙用
    python re 正则提取中文
    一个python爬虫协程的写法(gevent模块)
    python 中range和xrange的区别
    python 监控oracle 数据库
    Spring security 知识笔记【自定义登录页面】
    Spring security 知识笔记【内存角色授权】
    Spring security 知识笔记【入门】
  • 原文地址:https://www.cnblogs.com/bingabcd/p/6605712.html
Copyright © 2020-2023  润新知