0

我有一个来自 solaris 主机的 df 输出,我需要从中仅显示所需的输出,并且还想在两个值之间进行数学运算(减法)并显示其输出。

bash-2.03# df -t /fsystem
/fsystem          (filer:/vol/volname/filesys): 3790340712 blocks 14310983 files
                                  total: 21616671840 blocks 30443110 files
bash-2.03#

预期输出:

/fsystem  filer:/vol/volname/filesys 16132127

其中 16132127 是减法的输出 (30443110 - 14310983)。最好在 awk 脚本的一行中执行此操作。

我能够从以下命令中提取所需的值,但无法进行数学运算并获得首选输出。

bash-2.03# df -t /fsystem | awk '(NR==1){打印 $1" "$2" "$5}(NR==2){打印 $4}'

/fsystem(文件管理器:/vol/volname/filesys):14310983

30443110

bash-2.03#

没有一个解决方案有效,可能是每个人都不理解命令输出格式。以下输出可能会有所帮助

bash-2.03$ df -t /fsystem | awk '{打印 $1}'

/f系统

全部的:

bash-2.03$ df -t /fsystem | awk '{打印 $4}'

30443110

bash-2.03$ df -t /fsystem | awk '{打印 $5}'

14310982

文件

bash-2.03$

4

5 回答 5

1
A="/fsystem (filer:/vol/volname/filesys): 3790340712 blocks 14310983 files total: 21616671840 blocks 30443110 files"
echo $A|awk '{print $10 - $5}'

16132127

于 2013-10-12T05:38:57.870 回答
0

有些像这样:

df -t /fsystem | awk -F"**" '{s=$6;f=$2" "$4;getline;print f,"("$2" - ",s")"}'
/fsystem filer:/vol/volname/filesys (30443110 -  14310983)
于 2013-10-12T05:43:02.740 回答
0
$ awk -v RS= '{gsub(/^\(|\):$/,"",$2); print $1, $2, ($10 - $5)}'
/fsystem filer:/vol/volname/filesys 16132127

如果名称中有 (, ) 或 : ,则 gsub() 是必需的,而不是设置 FS。如果您的名字可以包含空格,这将不起作用 - 如果您遇到这种情况,这将成为一个更棘手的问题。

于 2013-10-12T12:17:04.210 回答
0

编辑:(输入示例已被编辑更改!)尝试使用此命令忽略以下换行符awk

dt -t /fsystem  | awk 'BEGIN { RS = ""}; { C=$10 - $5; printf "%s %s\t%d\n",$1,$2,C}'

示例输出:

/fsystem (filer:/vol/volname/filesys): 16132127

如果您不想要所有介绍性文本,请将printf命令的部分替换为您希望输出的该部分出现的部分。例如:

printf "%s %d\n",$1,C

这给出了:

/fsystem 16132127
于 2013-10-12T05:56:03.487 回答
0

更普遍

df -t /ptsadmin |
awk -F '[ \t()]+' '/^total:/ { f=$3; next }
    { sub(/:$/,"",$2; d[NR]=$1" "$2; v[NR]=$5}
    END{ for(i=1; i<NR; ++i)
        print d[i] " " v[i]-f }'

通过选项添加()到负责删除它们。删除最后的冒号是由.FS-F$2sub()

于 2013-10-12T09:15:00.960 回答