head
例子:
Desktop:
λ df -h
Filesystem Size Used Avail Capacity iused ifree %iused Mounted on
/dev/disk1s7s1 113Gi 8.9Gi 8.6Gi 51% 355384 90345720 0% /
/dev/disk1s2 113Gi 3.3Gi 8.6Gi 28% 1743 90345720 0% /System/Volumes/Preboot
/dev/disk1s4 113Gi 24Ki 8.6Gi 1% 5 90345720 0% /System/Volumes/VM
/dev/disk1s6 113Gi 63Mi 8.6Gi 1% 660 90345720 0% /System/Volumes/Update
/dev/disk1s5 113Gi 91Gi 8.6Gi 92% 655534 90345720 1% /System/Volumes/Data
/dev/disk1s1 113Gi 64Ki 8.6Gi 1% 15 90345720 0% /Volumes/mnbvcxz - Data
/dev/disk3s1 58Gi 57Gi 843Mi 99% 209 8636800 0% /Volumes/Untitled
Desktop:
λ df -h | head -n1
Filesystem Size Used Avail Capacity iused ifree %iused Mounted on
是否有一个专门的命令可以按空格而不是换行显示字段的输出?
一个 cmd 将会执行该awk
cmd 的操作:
Filesystem Size Used Avail Capacity iused ifree %iused Mounted on \
| awk -F ' ' '{print$1}'
Filesystem
你似乎正在寻找
cut
。以你的例子来说,那就是
cut -d' ' -f1
。令人烦恼的是,没有标准命令可以提取由可变数量的空格分隔的列范围,而不会破坏间距:
cut -d ' ' -f 1-2
,任何单个空格都是分隔符,例如" a b"
4 个字段:“”、a、“”、b。cut -c 1-4
只剪切字符,不剪切字段awk '{print $1, $2}'
提取由任意数量的空格分隔的字段,忽略前导和尾随字段,因为这是默认情况下的特殊行为FS=" "
,但这些字段由一个空格字符(默认值OFS
)分隔输出。要提取第一个
$n
(或最多$n
)个字段,同时保留它们之间的空格,使用 GNUgrep
或兼容的方法,一种方法是使用:(注意它会丢弃空行)
现在,请注意,该命令的输出
df
不遵循允许以这种方式可靠地提取数据的模式,因为字段值本身可以包含空格。例如,请参阅Mounted on
标头或某些安装点。另请参阅某些字段如何左对齐和某些字段右对齐。cut -c
在这种情况下,如果不对字段宽度进行硬编码(例如使用),就很难提取字段。如果可以的话,最好是告诉生成输出的工具仅打印您想要的列。例如,通过 GNU 实现
df
,您可以使用:如果您需要对输出进行后处理,请寻找以可解析格式输出的选项。对于
df
,-P
的帮助很小,df
的输出无法可靠地进行后处理。如果在 Linux 上,
findmnt
和lsblk
GNU可以输出与可后处理方式stat -f
相同的信息(例如,请参阅如何使用包含无效 UTF-8 的字符串处理 JSON和for的选项)df
-J
-c
stat