linux 在shell中使用TB单位从df命令添加列值

nwwlzxa7  于 12个月前  发布在  Linux
关注(0)|答案(1)|浏览(146)

我试图建立一个表,显示不同的文件夹(f1-f7)的磁盘大小,如下所示。我还希望底部一行显示总数。
| | 使用|利用|使用百分比|山| Mount |
| --|--|--|--|--|--|
| F1| 10T| 10T| 0.000462T |百分百|M1|
| F2| 12T| 0.223T| 5T|百分百|M2|
| 总|22T| 10.223T | 5.000462T |xx| N/A|
“df -h f1 f2”命令返回:
| | 使用|利用|使用百分比|山| Mount |
| --|--|--|--|--|--|
| F1| 10T| 10T| 462MB|百分百|M1|
| F2| 12T| 223GB| 5T|百分百|M2|
到目前为止,我的剧本是:

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}'

字符串
它返回:
| | 使用|利用|使用百分比|山| Mount |
| --|--|--|--|--|--|
| F1| 10T| 10T| 462MB|百分百|M1|
| F2| 12T| 223GB| 5T|百分百|M2|
我尝试使用“{total = total + $3}END{print total}”,但它不适合表格格式,并且只添加整数而不包括单位,不管同一列中的值具有不同的单位。我如何以人类可读的格式获得以TB为单位的总计行?

k5hmc34c

k5hmc34c1#

你能试试这个吗

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"
}

字符串
哪里

  • echo显示您的输入
  • OFS =“\t”使用制表符作为输出分隔符
  • NR == 1和$1=$1表示重新格式化标题并按原样打印
  • 对于(i=2;i<=4;i++),我们查看第2、第3和第4个值
  • 然后我们寻找T或G或M,然后重新格式化当前值,更新数组中的总数,并跟踪要显示的小数位数
  • END块,我们打印出Total行

我得到这个输出

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

相关问题