软件测试 Linux三剑客之awk命令详解_30、awk指令,2024年最新贼好用的软件测试学习路线集合

36 阅读3分钟

awk '{ print $n }' input_file


此命令将打印 input\_file 文件的第`n`列。


1. 打印符合条件的行:



awk '/pattern/ { print }' input_file


该命令将打印 input\_file 文件中包含 "pattern" 的所有行。


1. 使用字段分隔符:



awk -F',' '{ print $1 }' input_file


此命令将使用逗号作为字段分隔符,并打印 input\_file 文件的第一个字段。


#### 内置变量


awk 提供了一些内置变量,方便您在处理文本时使用。以下是一些常用的内置变量:


* $0:当前行的内容。
* 1、1、1、2、$3...`:当前行的第一个、第二个、第三个字段等。
* NR:当前行的行号。
* NF:当前行的字段数。


#### 示例用法


1. 计算文件中数字的总和:



awk '{ sum +=$1 } END { print sum}' number.txt

30


上述命令将计算 `numbers.txt` 文件中第一列所有数字的总和,并打印结果。


1. 查找最长的行:



awk 'length > max_length { max_length = length; longest_line = $0 } END { print longest_line }' text.txt

my favorite food is jiaozi


此命令将在 text.txt 文件中查找最长的行,并打印该行。


1. 使用自定义分隔符:



awk -F':' '{ print $1 }' /etc/passwd

########################## root daemon bin sys sync games man lp mail news uucp proxy


该命令将使用冒号作为字段分隔符,并打印 /etc/passwd 文件的第一个字段(用户名)。


#### awk文件中读取脚本


awk 允许将脚本命令存储到文件中,然后再在命令行中引用,比如:



cat awk.sh {print 1"shomedirectoryis"1 "'s home directory is " 6} $ awk -F: -f awk.sh /etc/passwd root's home directory is /root daemon's home directory is /usr/sbin bin's home directory is /bin sys's home directory is /dev sync's home directory is /bin games's home directory is /usr/games man's home directory is /var/cache/man lp's home directory is /var/spool/lpd mail's home directory is /var/mail news's home directory is /var/spool/news uucp's home directory is /var/spool/uucp proxy's home directory is /bin www-data's home directory is /var/www backup's home directory is /var/backups list's home directory is /var/list irc's home directory is /var/run/ircd gnats's home directory is /var/lib/gnats nobody's home directory is /nonexistent systemd-network's home directory is /run/systemd systemd-resolve's home directory is /run/systemd systemd-timesync's home directory is /run/systemd messagebus's home directory is /nonexistent syslog's home directory is /home/syslog _apt's home directory is /nonexistent muller's home directory is /home/muller


awk.sh 脚本文件会使用 print 命令打印 /etc/passwd 文件的主目录数据字段(字段变量 6),以及userid数据字段(字段变量6),以及 userid 数据字段(字段变量 6),以及userid数据字段(字段变量1)。注意,在程序文件中,也可以指定多条命令,只要一条命令放一行即可,之间不需要用分号。


#### awk BEGIN关键字


awk 中还可以指定脚本命令的运行时机。默认情况下,awk 会从输入中读取一行文本,然后针对该行的数据执行程序脚本,但有时可能需要在处理数据前运行一些脚本命令,这就需要使用 BEGIN 关键字。


BEGIN 会强制 awk 在读取数据前执行该关键字后指定的脚本命令,例如:



awk 'BEGIN {print "The fruits.txt Contents:"}

{print $0}' fruits.txt The fruits.txt Contents: apple APPLE banana BANANA ORANGE orange grape Grape good Good apple orange orange orange


可以看到,这里的脚本命令中分为 2 部分,BEGIN 部分的脚本指令会在 awk 命令处理数据前运行,而真正用来处理数据的是第二段脚本命令。


#### awk END关键字


和 BEGIN 关键字相对应,END 关键字允许我们指定一些脚本命令,awk 会在读完数据后执行它们,例如:





![img](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/121827e2ea664e37b0c49293c5743f4d~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MzIxMjA3NDIwNDUy:q75.awebp?rk3s=f64ab15b&x-expires=1772949722&x-signature=8ws3QmfLJ9hJVbzSCMlrALVwK0A%3D)
![img](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/805d56aa2da9418c82119caf881401e8~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MzIxMjA3NDIwNDUy:q75.awebp?rk3s=f64ab15b&x-expires=1772949722&x-signature=IphiU4TNFe8SVWnLk1w%2BaJGjHEE%3D)

**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**了解详情》docs.qq.com/doc/DSlVlZExWQ0FRSE9H**