awk 获取特定行?

Awk get specific line?

我正在尝试使用 awk 命令获取特定行。

当我执行 df -h 时,我得到:-

Filesystem      Size  Used Avail Use% Mounted on
udev             16G     0   16G   0% /dev
tmpfs           3.2G  2.7M  3.2G   1% /run
/dev/nvme0n1p2  468G   64G  381G  15% /
tmpfs            16G   77M   16G   1% /dev/shm
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs            16G     0   16G   0% /sys/fs/cgroup
/dev/loop0      100M  100M     0 100% /snap/core/11420
/dev/loop2       56M   56M     0 100% /snap/core18/2074

使用 df -h | awk '{print , , , }' 得到以下输出:-

Size Used Avail Use%
16G 0 16G 0%
3.2G 2.7M 3.2G 1%
468G 64G 381G 15%
16G 80M 16G 1%
5.0M 4.0K 5.0M 1%
16G 0 16G 0%

无论是仅使用 awk 还是其他命令,我如何才能仅从与“/”分区关联的任何内容中获取内容?

一种 awk 方法是在字段 6 上进行过滤。也许:

df -h | awk '=="/" {print , , , }'

或者,您可以告诉 df 只显示 /:

df -h / | awk '{print , , , }'

您可以在 awk 打印语句之前的正则表达式中使用斜杠符号:

df -h | awk ' ~ /\// {print , , , }'

一个非常简单的替代方案,使用 sed 简单地抑制 pattern-space 与 -n 的正常打印,并输出以 '/' 结尾的行,例如

df -h | sed -n '/\/$/p'

如果要将每个输出字段之间的白色space压缩为单个白色space分隔符,您可以简单地通过管道传输到tr,例如

df -h | sed -n '/\/$/p' | tr -s [[:blank:]]

示例Use/Output

使用文件 dat/dfout.txt 中的 df 输出,您将拥有:

$ sed -n '/\/$/p' dat/dfout.txt
/dev/nvme0n1p2  468G   64G  381G  15% /

或者在我的系统上,每个字段之间的白色space被压缩成一个白色space,你有:

$ df -h | sed -n '/\/$/p' | tr -s [[:blank:]]
/dev/sdb2 40G 31G 6.5G 83% /

使用 awk 和一个正则表达式

另一种使用 awk 的简单方法是在末尾对相同的 '/' 使用正则表达式匹配,例如

df -h | awk ' ~ /\/$/'

(默认规则 print 应用于匹配)

将白色space压缩为单个定界符的同一件事将是:

df -h | awk ' ~ /\/$/ { = ; print}'

其中 = 强制重新计算字段,删除多余的白色space,但随后需要明确的 print,因为提供的不仅仅是默认规则。