我正在尝试收集有关不同服务器上剩余空间量的信息。因此,当我执行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
现在我想获取可用磁盘空间的数据。因此,请告诉我如何从特定列中获取数据。
答案 0 :(得分:9)
例如,您可以说:
df --output=source,avail
或者如Tim Bunce所述,您可以使用--direct
来防止长文件系统名称将行拆分为两行。这会将文件系统显示为-
。
来自man df
:
<强> - 输出[= FIELD_LIST] 强>
使用FIELD_LIST定义的输出格式,或者打印所有字段if FIELD_LIST被省略。
...
FIELD_LIST是要包含的以逗号分隔的列列表。有效 字段名称是:'source','fstype','itotal','iused','iavail', 'ipcent','size','used','avail','pcent'和'target'(见信息 页)。
<强> - 直接强>
显示文件的统计信息而不是挂载点
$ df --output=source,avail
Filesystem Avail
/dev/sda7 321675536
答案 1 :(得分:5)
fedorqui的解决方案更清洁,但仅适用于df
更通用的方法是使用sed 's/ \+/ /g'
或tr -s ' '
将多个空格折叠到单个空格,然后使用带空格的cut
作为分隔符:cut -d" " -f 4
所以命令是:
df -k | tr -s ' ' | cut -d" " -f 4
结果是这样的:
Available
26027952
854220
68376208
相同的方法适用于将数据输出到列的其他命令。
例如ls -l | tr -s ' ' | cut -d" " -f 6,7,8
将打印ls -l
的时间列:
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