Shell 如何在linux df命令中选择特定列

Shell 如何在linux df命令中选择特定列,shell,freebsd,linux-df,Shell,Freebsd,Linux Df,我试图收集关于不同服务器上剩余空间量的信息。所以当我执行df-k时,我得到的输出是: Filesystem 1024-blocks Used Avail Capacity Mounted on /dev/ad1s1f 125925198 2568970 113282214 2% /builds 有时输出如下: Filesystem 1K-blocks Used Available Use% Mounted on 10.102.1

我试图收集关于不同服务器上剩余空间量的信息。所以当我执行df-k时,我得到的输出是:

Filesystem  1024-blocks    Used     Avail Capacity  Mounted on
/dev/ad1s1f   125925198 2568970 113282214     2%    /builds
有时输出如下:

Filesystem           1K-blocks      Used Available Use% Mounted on
10.102.1.123:/storage/disk1/build
                     10735331328 10597534720 137796608  99% /buildbackup

现在我想获取可用磁盘空间上的数据。因此,让我知道如何从特定列获取数据。

例如,您可以说:

df --output=source,avail
或者如所评论的,您可以使用-direct来防止长文件系统名称将行一分为二。这将把文件系统显示为-

来自man df:

-输出[=字段列表]

使用“字段列表”定义的输出格式,或在必要时打印所有字段 字段列表被省略

字段列表是以逗号分隔的列列表。有效的 字段名称为:'source'、'fstype'、'itotal'、'iused'、'iavail', “ipcent”、“size”、“used”、“avail”、“pcent”和“target”参见信息 页面

-直接的

显示文件的统计信息而不是装入点

测验
fedorqui的解决方案更清洁,但只适用于df

一种更通用的方法是使用sed的//\+//g'或tr-s''将多个空间折叠为单个空间,然后使用带空格的cut作为分隔符:cut-d-f4 因此,命令是:

df -k | tr -s ' ' | cut -d" " -f 4
其结果如下:

Available
26027952
854220
68376208
同样的方法也适用于将数据输出到列的其他命令。 例如ls-l | tr-s | cut-d-f6,7,8 将从ls-l打印时间列:


它只适用于df,因为问题是关于df的:另外,请注意,您可以使用tr-s'@fedorqui压缩空格。我知道问题是关于df的,正如我所说的,您的答案更好。不过,我还是想给出一个更一般的答案,以防有人需要。说得好!但是,请注意,df的问题是,有时会得到一个如此大的文件系统,它必须以两行不同的方式打印,这对于sed来说是很难处理的。当我执行上面的命令:df-k | sed's/\+//g'| cut-d-f4时,输出是空白的。df-k.|sed's/\+//g'| cut-d-f4 df-k.|sed的//\+//g’当我在系统上执行上述命令时,将显示以下消息。df-k-output=source,Avail-df:invalical选项--用法:df[-b |-g |-H |-H |-k |-m |-P][-aciln][t-type][file | filesystem…]注意您需要说Avail小写。如果这是一种类型,但问题仍然存在:您使用的是什么系统?我使用的机器是FreeBSD6.2Did您是否尝试使用avail而不是avail?是的,我尝试了,输出与以前相同。df-output=source,avail-df:非法选项--用法:df[-b |-g |-H |-H |-k |-m |-P][aciln][t-type][file | filesystem…]
Available
26027952
854220
68376208
Dec 30 17:46
Mar 1 15:33
Mar 1 14:58
Mar 2 00:00
Jan 5 14:20
Mar 1 15:33
Feb 26 11:57
Feb 4 11:11
Mar 1 14:57