提问人:waffle418 提问时间:10/31/2023 最后编辑:waffle418 更新时间:11/4/2023 访问量:97
在 shell 中使用 TB 单位从 df 命令添加列值
Adding column values from df command with Terabyte units in shell
问:
我正在尝试构建一个显示不同文件夹 (f1-f7) 的磁盘大小的表格,如下所示。我还想要一个显示总数的底行。
大小 | 使用 | 利用 | 使用% | 安装 | |
---|---|---|---|---|---|
F1系列 | 207 | 207 | 0.000462吨 | 100% | 米1 |
F2 键 | 227 | .223吨 | 5吨 | 100% | 米2 |
总 | 127 | 10.223吨 | 5.000462吨 | xx | 不适用 |
“df -h f1 f2” 命令返回:
大小 | 使用 | 利用 | 使用% | 安装 | |
---|---|---|---|---|---|
F1系列 | 207 | 207 | 462兆字节 | 100% | 米1 |
F2 键 | 227 | 223千兆字节 | 5吨 | 100% | 米2 |
到目前为止,我的脚本是:
df -h f1 f2 | awk '!$2{getline x;$0=$0 x}{printf "%-35s %10s %6s %6s %4s %s\n",$1,$2,$3,$4,$5,$6}'
它返回:
大小 | 使用 | 利用 | 使用% | 安装 | |
---|---|---|---|---|---|
F1系列 | 207 | 207 | 462兆字节 | 100% | 米1 |
F2 键 | 227 | 223千兆字节 | 5吨 | 100% | 米2 |
我尝试使用“{total = total + $3}END{print total}”,但它不适合表格格式,并且只添加整数而不包含单位,而不管同一列中具有不同单位的值。如何以 TB 为单位以人类可读格式获得总行数?
答:
1赞
stuffy
11/4/2023
#1
你能试试这个吗
echo " Size Used Avail Use% Mount
f1 10T 10T 462MB 100% m1
f2 12T 223GB 5T 100% m2" | awk '
BEGIN {
OFS = "\t"
}
NR == 1 {
$1 = $1
print "", $0
next
}
{
for (i = 2; i <= 4; i++) {
if ($i ~ /T/) {
total[i] = total[i] + $i
scale[i] = scale[i] > 0 ? scale[i] : 0
}
if ($i ~ /G/) {
$i = ($i / 1000) "T"
total[i] = total[i] + ($i / 1000)
scale[i] = scale[i] > 3 ? scale[i] : 3
}
if ($i ~ /M/) {
$i = ($i / 1000 / 1000) "T"
total[i] = total[i] + ($i / 1000 / 1000)
scale[i] = scale[i] > 6 ? scale[i] : 6
}
}
print $0
}
END {
printf "Total" OFS
for (i = 2; i <= 4; i++) {
printf "%0.*fT%s", scale[i], total[i], OFS
}
print "xx" OFS "N/A"
}
哪里
- 回显显示您的输入
- OFS = “\t” 使用 tab 作为输出分隔符
- NR == 1 和 $1=$1 表示重新格式化标题并按原样打印
- for(i=2;i<=4;i++) 我们看第 2、3 和 4 个值
- 然后我们查找 T 或 G 或 M,然后重新格式化当前值并更新数组中的总计,并跟踪要显示的小数位数
- END 块,我们打印出总线
我得到这个输出
Size Used Avail Use% Mount
f1 10T 10T 0.000462T 100% m1
f2 12T 0.223T 5T 100% m2
Total 22T 10.223T 5.000462T xx N/A
评论
df -h f1 f2
x's
10T + 6.2G
10.0062T
10006.2G
10,006G
df
命令用于文件系统,而不是目录大小。如果文件夹位于同一文件中,则总数将毫无意义。还提供选项,可以做您可能想要的事情。df
--total