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
,因为提供的不仅仅是默认规则。
我正在尝试使用 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
,因为提供的不仅仅是默认规则。