Linux文本三剑客awk经典案例

前言:

AWK是一种专门用于文本处理的编程语言,它被广泛用于数据提取和报告生成,也是企业笔试面试常考的内容,以下34题是awk的用法案例,希望可以帮到你!

1.查看TCP连接状态

[root@node1 ~]# netstat -nat | awk '/^tcp/ {++state[$NF]}; END {for(key in state) print state[key],key}'| sort -nr
7 LISTEN
1 ESTABLISHED

2.查找请求数20个IP(常用于查找攻击源)

[root@node1 ~]# netstat -nalp|awk '/^tcp/ {print $5}'|awk -F: '{print $1}'| sort | uniq -c |sort -nr | head -n 20 
      4 
      3 0.0.0.0
      1 192.168.110.1

3.输出当前系统所有用户的UID:

[root@shell ~]# awk -F: '{print $3}' /etc/passwd
注释:-F:指定分隔符为:$3指定第三段

4.输出当前系统所有用户的UID,在首行加入UserUid:

[root@shell ~]# awk -F: 'BEGIN{print "UserUid"}{print $3}' /etc/passwd

5.输出当前系统shell为/bin/bash的用户名,在最后一行加入END That is last line!!!

[root@shell ~]# awk -F: '$NF=="/bin/bash" {print $1} END {print "That is last line!!!"}' /etc/passwd
root
kxy
fox
That is last line!!! 

6.输出当前系统上GID为0的用户的用户名

[root@shell ~]# awk -F: '$4==0{print $1}' /etc/passwd

7.输出当前系统上GID大于500的用户的用户名

[root@shell ~]# awk -F: '$4>500{print $1}' /etc/passwd

8.输出当前系统上的所有用户名和UID,以“ # # ”为分隔符

[root@shell ~]# awk -F: 'BEGIN{OFS=" # # "} {print $1,$3}' /etc/passwd
[root@shell ~]# awk -F: -v OFS=" # # " '{print $1,$3}' /etc/passwd

9.输出/etc/passwd文件中以“:”为分隔符的最后一段。

[root@shell ~]# awk -F: '{print $NF}' /etc/passwd

10.对/etc/pa;sswd文件中输出的每一行计数

[root@shell ~]# awk '{print NR,$0}' /etc/passwd

11.对/etc/passwd、/etc/fstab文件中输出的每一行分别计数。

[root@shell ~]# awk '{print FNR $0}' /etc/passwd /etc/fstab

12.自定义变量

[root@shell ~]# awk -v var="Linux.com.cn" BEGIN'{print var}'=
Linux.com.cn

13.以printf格式输出用户名,UID、GID

[root@shell ~]# awk -F: '{printf "%-19s %d %10i\n",$1,$3,$4}' /etc/passwd

14.检测当前系统上所有用户,如果用户名为root输出:Admin 如果用户名不为root输出:Common User

[root@shell ~]# awk -F: '{if ($1=="root") printf "%-19s: %s\n", $1,"Admin"; else printf "%-19s: %s\n", $1, "Common User"}' /etc/passwd

15.统计当前系统上UID大于500的用户的个数

[root@shell ~]# awk -F: '{if ($3>=500) sum++} END {print sum}' /etc/passwd

16.读取/etc/passwd文件中的每一行的每一个字段,输出每个字段中字符个数大于等于四的字段。

[root@shell ~]# awk -F: '{i=1;while (i<=NF) { if (length($i)>=4) {print $i}; i++ }}' /etc/passwd

17.使用do-while语句输出/etc/passwd中每一行中的前三个字段

[root@shell ~]# awk -F: '{i=1;do {print $i;i++} while(i<=3)}' /etc/passwd

18.使用for语句输出/etc/passwd中每一行中的前三个字段

[root@shell ~]# awk -F: '{for(i=1;i<=3;i++) print $i}' /etc/passwd

19.统计/etc/passwd文件中各种shell的个数

[root@shell ~]# awk -F: '$NF!~/^$/{BASHsum[$NF]++}END{for(A in BASHsum){printf "%-15s:%i\n",A,BASHsum[A]}}' /etc/passwd
注释:$NF!~/^$/:最后一个字段非空BASHsum[$NF]++:最后一个字段相同的加一

20.显示当前系统上UID号为偶数的用户名和UID

[root@shell ~] awk -F: '{if($3%2==1) next;{printf "%-19s%d\n",$1,$3}}' /etc/passwd

21.统计当前系统上以tcp协议工作的各端口的状态数

[root@shell ~]# netstat -ant | awk '/^tcp/ {++STATE[$NF]} END {for(a in STATE) print a, STATE[a]}'

22.输出/etc/passwd中的每一行以||||隔开,默认不换行

[root@shell ~]# awk -F: 'BEGIN{ORS="||||"}{print $0}' /etc/passwd
[root@shell ~]# awk -F: -v ORS="||||" '{print $0}' /etc/passwd

23.获取根分区剩余大小

[root@shell ~]# df -h | awk '/\/$/ {print $4}'
15G
[root@shell ~]# df -h | awk '$NF=="/" {print $4}'
15G

24.获取当前机器ip地址

[root@shell ~]# ip a | awk '/ens33$/ {print $2}'
192.168.110.132/24

25.打印/etc/passwd中UID大于500的用户名和uid

[root@shell ~]# awk -F: '$3>500 {print $1,$3}' /etc/passwd
nobody 65534
systemd-coredump 999
polkitd 998
colord 997
clevis 996

26./etc/passwd 中匹配包含root或net或ucp的任意行

[root@shell ~]# awk -F: '/root|net|ucp/' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

27.处理以下文件内容,将域名取出并根据域名进行计数排序处理(百度搜狐面试题) test.txt

http://www.baidu.com/index.html
http://www.baidu.com/1.html
http://post.baidu.com/index.html
http://mp3.baidu.com/index.html
http://www.baidu.com/3.html
http://post.baidu.com/2.html

[root@shell ~]# cat 
http://www.baidu.com/index.html
http://www.baidu.com/1.html 
http://post.baidu.com/index.html 
http://mp3.baidu.com/index.html 
http://www.baidu.com/3.html 
http://post.baidu.com/2.html
[root@shell ~]# awk -F/ '{print $3}' test3.txt | sort -nr | uniq -c
      3 www.baidu.com     
      2 post.baidu.com     
      1 mp3.baidu.com
[root@shell ~]# awk -F/ '{W[$3]++} END {for (k in W) print W[k],k}' test3.txt | sort -nr
3 www.baidu.com
2 post.baidu.com
1 mp3.baidu.com

28.请打印出/etc/passwd 第一个域,并且在第一个域所有的内容前面加上“用户帐号

[root@shell ~]# awk -F: 'BEGIN{print "用户账号:"}{print $1}' /etc/passwd

29.请打印出/etc/passwd 第三个域和第四个域

[root@shell ~]# awk -F: '{printf "%-5s %d\n", $3, $4}' /etc/passwd

30.请打印第一域,并且打印头部信息为:这个是系统用户,打印尾部信息为:“================”

[root@shell ~]# awk -F: 'BEGIN {print "系统用户"} {print $1} END {print "================"}' /etc/passwd

31.请打印出第一域匹配daemon的信息.

[root@shell ~]# awk -F: '$1~/daemon/' /etc/passwd
daemon:x:2:2:daemon:/sbin:/sbin/nologin

32.请将/etc/passwd 中的root替换成gongda,记住是临时替换输出屏幕看到效果即可

[root@shell ~]# sed 's/root/gongda/g' /etc/passwd
[root@node1 ~]# awk '{gsub(/root/, "gongda"); print}' /etc/passwd

33.请匹配passwd最后一段域bash结尾的信息,有多少条

[root@shell ~]# awk '/bash$/' passwd | wc -l
3
[root@shell ~]# awk '{ if ($NF~/bash$/) sum++ } END {print sum}' /etc/passwd
3

34.请同时匹配passwd文件中,带mail或bash的关键字的信息

[root@shell ~]# awk '$0~/mail|bash/' passwd
root:x:0:0:root:/root:/bin/bash
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
kxy:x:1000:1000:kxy:/home/kxy:/bin/bash
fox:x:1001:1001::/home/fox:/bin/bash
fox:x:1001:1001::/home/fox:/bin/mail

相关推荐

  1. Linux文本剑客awk经典案例

    2024-01-28 07:38:03       65 阅读
  2. Linux 剑客AWK

    2024-01-28 07:38:03       32 阅读
  3. Linux文本剑客:grep、awk、sed之对比

    2024-01-28 07:38:03       61 阅读
  4. Linux 文本处理剑客:grep、sed 和 awk

    2024-01-28 07:38:03       42 阅读
  5. Linux文本处理剑客awk、grep和sed

    2024-01-28 07:38:03       41 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-28 07:38:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-28 07:38:03       106 阅读
  3. 在Django里面运行非项目文件

    2024-01-28 07:38:03       87 阅读
  4. Python语言-面向对象

    2024-01-28 07:38:03       96 阅读

热门阅读

  1. Linux命令-arj命令(用于创建和管理.arj压缩包)

    2024-01-28 07:38:03       55 阅读
  2. 探索 Xind3 生态系统,解锁铭文资产的新玩法

    2024-01-28 07:38:03       59 阅读
  3. 2024/1/27 备战蓝桥杯 1

    2024-01-28 07:38:03       61 阅读
  4. 获取el-select的label

    2024-01-28 07:38:03       55 阅读
  5. Little云盘测试用例

    2024-01-28 07:38:03       53 阅读
  6. BGP故障分析——邻居无法建立的原因

    2024-01-28 07:38:03       48 阅读
  7. linux系统ansible工具简介与安装

    2024-01-28 07:38:03       54 阅读