AWK原理和用法小结

一、AWK

1.1 原理和常用选项

awk 是一种强大的文本处理工具,它提供了一种编程语言来处理文本文件中的数据。awk 能够对输入的文本数据进行模式匹配和处理,执行复杂的文本操作。

工作原理:

  1. 输入处理awk 从输入文件中读取数据,通常每行数据由空白字符分隔的字段组成。
  2. 模式匹配awk 可以根据指定的模式对输入行进行匹配。模式可以是正则表达式或条件表达式。
  3. 动作执行:当输入行与模式匹配时,awk 执行与该模式相关联的动作,如打印字段、计算总和等。
  4. 内置变量awk 提供了一些内置变量,如 NF(当前行的字段数)、NR(当前处理的记录数,通常是行号)等,用于控制处理流程。
  5. 用户定义变量:用户可以创建自己的变量来存储和操作数据。

命令和选项:

  • -f scriptfile:从指定的脚本文件中读取 awk 程序。
  • -v var=value:在 awk 程序开始之前设置变量的值。
  • -F separator:设置输入字段的分隔符,默认是空格或制表符。
  • -v FS=separator:与 -F 相同,设置输入字段的分隔符。
  • -v OFS=separator:设置输出字段的分隔符,默认与输入字段分隔符相同。
  • -v ORS=separator:设置输出记录的分隔符,默认是换行符。
  • -Fnr:不自动为输入文件的每一行编号。
  • -Fpat:设置使用 pat 作为字段分隔符。

1.2 练习

练习1:打印/etc/passwd的奇数行
[root@web1 ~]#awk 'NR % 2 == 1' /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
......

练习2:打印Linux系统的"IP地址,系统版本,CPU核心,内存大小"
[root@web1 ~]#hostname -I
192.168.9.19 172.17.0.1 172.18.0.1
[root@web1 ~]#cat /etc/os-release 
NAME="Ubuntu"
VERSION="20.04.6 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.6 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal
[root@web1 ~]#lscpu
架构:                              x86_64
CPU 运行模式:                      32-bit, 64-bit
字节序:                            Little Endian
Address sizes:                      42 bits physical, 48 bits virtual
CPU:                                2
在线 CPU 列表:                     0,1
每个核的线程数:                    2
每个座的核数:                      1
......
[root@web1 ~]#free -h
              总计         已用        空闲      共享    缓冲/缓存    可用
内存:       1.7Gi       432Mi       114Mi       2.0Mi       1.2Gi       1.1Gi
交换:          0B          0B          0B
#或者使用top命令查看
[root@web1 ~]#cat -n /etc/hosts
     1	127.0.0.1	localhost
     2	
     3	# The following lines are desirable for IPv6 capable hosts
     4	::1	localhost	ip6-localhost	ip6-loopback
     5	ff02::1	ip6-allnodes
     6	ff02::2	ip6-allrouters
     7	127.0.1.1	localhost.vm	localhost
     8	127.0.1.1	hcss-ecs-89f4	hcss-ecs-89f4

练习3:统计某个文件夹下的文件占用的字符数
[root@web1 ~]#find /etc/ -type f -exec cat {} + | wc -m
2270257
#查找etc下的所有文件,并执行cat命令然后统计字符数
此条目发表在第五周作业分类目录。将固定链接加入收藏夹。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注