第 A-1 章 Awk Examples

作者: Brinnatt 分类: ARM64 Linux 补充知识 发布时间: 2022-01-21 20:53

该章节作为 Awk 语法解析的补充章节,主要演示一下常用的一些示例;

A1、awk 插入几个新字段

在 "a b c d" 的 b 后面插入 3 个字段 e f g

[root@arm64v8 ~]# echo a b c d|awk '{$3="e f g "$3;print}'
a b e f g c d
[root@arm64v8 ~]#

A2、awk 格式化空白

移除每行的前缀、后缀空白,并将各部分左对齐。

[root@arm64v8 ~]# cat a.txt 
      aaaa        bbb     ccc                 
   bbb     aaa ccc
ddd       fff             eee gg hh ii jj
[root@arm64v8 ~]# 
[root@arm64v8 ~]# awk 'BEGIN{OFS="\t"}{$1=$1;print}' a.txt
aaaa    bbb     ccc
bbb     aaa     ccc
ddd     fff     eee     gg      hh      ii      jj
[root@arm64v8 ~]#

A3、awk 筛选 IPv4 地址

从 ifconfig 命令的结果中筛选出除了 lo 网卡外的所有 IPv4 地址。

[root@arm64v8 ~]# ifconfig | awk '/inet / && !($2 ~ /^127/){print $2}'
10.51.111.142
[root@arm64v8 ~]#

A4、awk 读取 .ini 配置文件中的某段

[base]
name=os_repo
baseurl=https://xxx/centos/$releasever/os/$basearch
gpgcheck=0

enable=1

[mysql]
name=mysql_repo
baseurl=https://xxx/mysql-repo/yum/mysql-5.7-community/el/$releasever/$basearch

gpgcheck=0
enable=1

[epel]
name=epel_repo
baseurl=https://xxx/epel/$releasever/$basearch
gpgcheck=0
enable=1
[percona]
name=percona_repo
baseurl = https://xxx/percona/release/$releasever/RPMS/$basearch
enabled = 1
gpgcheck = 0
--------------------------------------------------------------------------------
[root@arm64v8 ~]# awk '
>     BEGIN{RS=""}
>     /\[mysql\]/{
>     print;
>     while ((getline)>0){
>         if(/\[.*\]/){
>             exit
>         }
>         print
>     }
> }' a.txt
[mysql]
name=mysql_repo
baseurl=https://xxx/mysql-repo/yum/mysql-5.7-community/el/$releasever/$basearch
gpgcheck=0
enable=1
[root@arm64v8 ~]#

A5、awk 根据某字段去重

去掉 uid=xxx 重复的行。

[root@arm64v8 ~]# cat a.txt 
2019-01-13_12:00_index?uid=123
2019-01-13_13:00_index?uid=123
2019-01-13_14:00_index?uid=333
2019-01-13_15:00_index?uid=9710
2019-01-14_12:00_index?uid=123
2019-01-14_13:00_index?uid=123
2019-01-15_14:00_index?uid=333
2019-01-16_15:00_index?uid=9710
[root@arm64v8 ~]# 
[root@arm64v8 ~]# awk -F"?" '!arr[$2]++{print}' a.txt 
2019-01-13_12:00_index?uid=123
2019-01-13_14:00_index?uid=333
2019-01-13_15:00_index?uid=9710
[root@arm64v8 ~]#

A6、awk 次数统计

[root@arm64v8 ~]# cat a.txt 
portmapper
portmapper
portmapper
portmapper
portmapper
portmapper
status
status
mountd
mountd
mountd
mountd
mountd
mountd
nfs
nfs
nfs_acl
nfs
nfs
nfs_acl
nlockmgr
nlockmgr
nlockmgr
nlockmgr
nlockmgr
[root@arm64v8 ~]# awk '{arr[$1]++}END{OFS="\t"; for(idx in arr){print arr[idx],idx}}' a.txt 
4   nfs
2   status
5   nlockmgr
6   portmapper
2   nfs_acl
6   mountd
[root@arm64v8 ~]#

A7、awk 统计 TCP 连接状态数量

[root@arm64v8 ~]# netstat -tnap | awk '
/^tcp/{
    arr[$6]++
    }
    END{
        for(state in arr){
            print state ": " arr[state]
        }
    }
'
LISTEN: 10
ESTABLISHED: 1
[root@arm64v8 ~]#

A8、awk 统计日志中各 IP 访问非 200 状态码的次数

[root@arm64v8 ~]# cat a.txt 
111.202.100.141 - - [2019-11-07T03:11:02+08:00] "GET /robots.txt HTTP/1.1" 301 169
[root@arm64v8 ~]# awk '$8!=200{arr[$1]++}END{for(i in arr){print arr[i],i}}' a.txt | sort -k1nr | head -n 10
1 111.202.100.141
[root@arm64v8 ~]#

A9、awk 统计独立 IP

url 访问 IP 访问时间访问人

[root@arm64v8 ~]# cat a.txt 
a.com.cn|202.109.134.23|2015-11-20 20:34:43|guest
b.com.cn|202.109.134.23|2015-11-20 20:34:48|guest
c.com.cn|202.109.134.24|2015-11-20 20:34:48|guest
a.com.cn|202.109.134.23|2015-11-20 20:34:43|guest
a.com.cn|202.109.134.24|2015-11-20 20:34:43|guest
b.com.cn|202.109.134.25|2015-11-20 20:34:48|guest
[root@arm64v8 ~]# 
[root@arm64v8 ~]# awk '
BEGIN{
    FS="|"
}
!arr[$1,$2]++{
    arr1[$1]++
}
END{
    for(i in arr1){
        print i,arr1[i]
    }
}' a.txt 
a.com.cn 2
c.com.cn 1
b.com.cn 2
[root@arm64v8 ~]#
标签云