• AWK命令介绍及相关bash命令知识


    awk是一个强大的文本分析工具,它把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。

    `awk ‘{pattern + action}’ {filenames}`

    pattern:表示awk在数据中查找的内容;使用正则表达式则需要//括起来
    action:表示action 是在找到匹配内容时所执行的一系列命令。
    awk是以文件的一行为处理单位的。awk每接收文件的一行,然后执行相应的命令,来处理文本。

    三种调用方式

    1、命令行方式
    awk [-F file-seperator] 'commands' input-file
    commands是awk命令,[-F file-seperator]是可选的。input-file是待处理文件,

    2、shell脚本方式
    即,将所有awk命令写入一个文件,并该文件执行。然后awk命令解释器作为脚本的首行,一遍通过键入脚本名称来调用。首行通常为:#!/bin/bash

    3、将所有命令插入一个单独文件,然后调用;
    awk -f awk-script-file input-file
    -f加载awk-script-file的awk脚本。

    举例说明

    命令行方式
    只是显示/etc/passwd的用户名和所在行数,中间使用制表键空格。

    [root@nginx ~]# awk -F: '{print NR"	"$1}' /etc/passwd
    1    root
    2    bin
    3    daemon
    4    adm
    5    lp
    6    sync
    7    shutdown
    8    halt
    9    mail
    10    operator
    11    games
    12    ftp
    13    nobody
    14    systemd-bus-proxy
    15    systemd-network
    16    dbus
    17    polkitd
    18    abrt
    19    unbound
    20    tss
    21    libstoragemgmt
    22    rpc
    23    colord
    24    usbmuxd
    25    saslauth
    26    geoclue
    27    rtkit
    28    rpcuser
    29    nfsnobody
    30    radvd
    31    qemu
    32    ntp
    33    chrony
    34    setroubleshoot
    35    sssd
    36    pulse
    37    gdm
    38    gnome-initial-setup
    39    sshd
    40    avahi
    41    postfix
    42    tcpdump
    43    kyle
    44    tom
    45    jack

    显示/etc/passwd的用户名即共分割的段数

    [root@nginx ~]# awk -F: '{print $1,"===",NF}' /etc/passwd
    root === 7
    bin === 7
    daemon === 7
    adm === 7
    lp === 7
    sync === 7
    shutdown === 7
    halt === 7
    mail === 7
    operator === 7
    games === 7
    

      显示/etc/passwd 行数大于2,小于5的用户名即行数

    [root@nginx ~]# awk -F: 'NR > 2 &&  NR < 5 {print $1,"===",NR}' /etc/passwd
    daemon === 3
    adm === 4
    View Code

    使用正则表达式的awk:

    [root@nginx ~]# awk -F: '/bash$/{print $1,"===",NR}' /etc/passwd
    root === 1
    kyle === 43
    tom === 44
    jack === 45
    rose === 46

    对第7段操作使用“~”

    [root@nginx ~]# awk -F: '$7~/h$/{print $7,"===",NR}' /etc/passwd
    /bin/bash === 1
    /bin/bash === 43
    /bin/bash === 44
    /bin/bash === 45
    /bin/bash === 46
    /bin/bash === 51
    /bin/bash === 52
    /bin/bash === 53
    /bin/bash === 54
    /bin/bash === 55

    awk可以使用变量:使用awk -v 如:

    设置变量count=500

    [root@nginx ~]# count=500
    [root@nginx ~]# awk -v x=$count -F: '$3>=x{print $1,"===",NR}' /etc/passwd
    systemd-bus-proxy === 14
    polkitd === 17
    unbound === 19
    libstoragemgmt === 21
    colord === 23
    saslauth === 25
    geoclue === 26
    nfsnobody === 29
    chrony === 33
    setroubleshoot === 34
    sssd === 35
    gnome-initial-setup === 38
    kyle === 43
    tom === 44
    jack === 45
    rose === 46

    bash命令补充知识

    变量,用于表示程序运行的一些状态变化

    命名规则:以字母或下划线开头,余下的可以是字母、数字和下划线

    一般性命名规范:

    1、以字母开头

    2、使用下划线或中划线做单词的连接

    3、同类型的使用数字区分

    4、对于文件最好加上拓展名,如tar.gz;

    设置变量:varname=value

    删除变量 unset varname

    变量有系统变量和环境变量

    系统启动时会加载一下文件和目录下内容

    /etc/profile

    /etc/profile.d/

    /etc/bashrc

    /root/.bahsrc

    /root/.bash-profile

    在这些文件和目录里写入的变量,就会变成系统变量。

    常用系统变量

    PATH、PWD、LANG、HOME、HISTSIZE、PS1、IFS

    全局变量和局部变量

    [root@nginx ~]# local_var='local'
    [root@nginx ~]# export whole_var='whole'
    [root@nginx ~]# echo $local_var 
    local
    [root@nginx ~]# echo $whole_var 
    whole
    [root@nginx ~]# bash
    [root@nginx ~]# echo $local_var
    
    [root@nginx ~]# echo $whole_var 
    whole

    运算符

    算术运算符主要有:+、-、*、/、%

    关系逻辑运算符有:<、>、<=、>=、== 、!= 

    INTEGER1 -eq INTEGER2
                  INTEGER1 is equal to INTEGER2 ## ==
    
           INTEGER1 -ge INTEGER2
                  INTEGER1 is greater than or equal to INTEGER2 #>=
    
           INTEGER1 -gt INTEGER2
                  INTEGER1 is greater than INTEGER2 #>
    
           INTEGER1 -le INTEGER2
                  INTEGER1 is less than or equal to INTEGER2 #<=
    
           INTEGER1 -lt INTEGER2
                  INTEGER1 is less than INTEGER2 #<
    
           INTEGER1 -ne INTEGER2
                  INTEGER1 is not equal to INTEGER2 # !=

    赋值运算符:=、+=、*=、/=、%=

    举例说明:

    [root@nginx ~]# d=2
    [root@nginx ~]# ((d+=3))
    [root@nginx ~]# echo $d
    5
    [root@nginx ~]# ((d-=4))
    [root@nginx ~]# echo $d
    1
    [root@nginx ~]# ((d*=12))
    [root@nginx ~]# echo $d
    12
    [root@nginx ~]# ((d/=2))
    [root@nginx ~]# echo $d
    6
    [root@nginx ~]# ((d%=4))
    [root@nginx ~]# echo $d
    2

    if多分支

    [root@nginx test]# vim check_file.sh
    
    #!/bin/bash
    var='/etc/passwd'
    if [ -d $var ]
        then
            echo '$var is directory'
    elif [ -b $var ]
        then
            echo '$var is block'
    elif [ -f $var ]
        then
            echo '$var is regular file'
    else
            echo '$var is unknow'
    fi

    注意:[ -b $var ]的格式,必须有空格

  • 相关阅读:
    菜根谭#308
    菜根谭#307
    菜根谭#306
    菜根谭#305
    菜根谭#304
    菜根谭#303
    菜根谭#302
    菜根谭#301
    菜根谭#300
    菜根谭#299
  • 原文地址:https://www.cnblogs.com/greatkyle/p/6605134.html
Copyright © 2020-2023  润新知