You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unix下如何读取df输出的指定Filesystem列(解决列合并问题)

解决df命令输出中Filesystem列的提取与分割问题

我明白你的困扰——df -k DELETEME的输出里,因为State列是空值,导致用默认空格分割的awk命令会把Filesystem列直接当成第一列,而你需要从这列的$ZPMON.DELETEMESTARTED里提取出DELETEME部分。下面给你几个实用的解决办法:

方法一:先提取Filesystem列,再匹配目标字符串

首先直接提取数据行的第一列(也就是Filesystem列,因为State列无值导致列偏移),再用正则匹配提取DELETEME:

df -k DELETEME | tail -1 | awk '{match($1, /DELETEME/); print substr($1, RSTART, RLENGTH)}'

解释:

  • match($1, /DELETEME/):在第一列内容里定位DELETEME的位置
  • substr($1, RSTART, RLENGTH):根据定位到的起止位置,提取目标字符串

方法二:基于数字位置定位Filesystem列(更鲁棒)

如果担心State列偶尔有值导致列位置变化,可以通过识别第一个数字的位置,提取开头到该位置的内容作为Filesystem列,再提取目标字符串:

df -k DELETEME | tail -1 | sed 's/^\([^0-9]*\)[0-9].*/\1/; s/ *$//; s/.*\(DELETEME\).*/\1/'

解释:

  • s/^\([^0-9]*\)[0-9].*/\1/:提取开头到第一个数字前的所有内容(即Filesystem列,可能带末尾空格)
  • s/ *$//:去掉末尾多余的空格
  • s/.*\(DELETEME\).*/\1/:从清理后的Filesystem内容里提取DELETEME

方法三:一步到位的awk命令

用awk完成所有操作,逻辑更清晰:

df -k DELETEME | tail -1 | awk '{
    # 提取开头到第一个数字前的内容作为Filesystem列
    match($0, /^[^0-9]+/);
    fs = substr($0, RSTART, RLENGTH);
    # 去掉末尾空格
    gsub(/ +$/, "", fs);
    # 提取DELETEME
    match(fs, /DELETEME/);
    print substr(fs, RSTART, RLENGTH);
}'

这些方法都能准确帮你提取到需要的DELETEME部分,你可以根据自己的习惯选择使用。

内容的提问来源于stack exchange,提问作者Manjusha Yenakandla

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 11:01:40