首页 > 解决方案 > Bash TreeSize 脚本 - 改进的输出对齐

问题描述

鉴于下面的脚本

#/bin/sh
echo
echo treesize of `pwd` at `date +"%Y-%m-%d %H:%M:%S"`
echo

du -k --max-depth=1 | sort -nr | awk '
BEGIN {
    split("KB,MB,GB,TB", Units, ",");
}

{
    u = 1;
    while ($1 >= 1024) {
            $1 = $1 / 1024;
            u += 1
    }

    $1 = sprintf("% *d%.1f %s", (7-length(sprintf("%.1f", $1))), 0, $1, Units[u]);
    print $0;
}
'
echo

得到以下输出:

 treesize of /home/jonathan at 2020-04-08 10:18:50

 0295.4 GB .
 0175.6 GB ./Documents
 0118.5 GB ./vmware
  047.9 MB ./Desktop
  032.0 KB ./Pictures
  012.0 KB ./Videos
   04.0 KB ./.Public

请问如何删除前导 0 并使用空格?欣赏剧本!归功于互联网上的某人:)

标签: linuxbashawkdirectorysizeof

解决方案


利用sed

sed 's#^[[:space:]]*0# #g'

^-- 行
[[:space:]]首 <- 空格字符
*<- 0 次或多次出现

#/bin/sh
echo
echo treesize of `pwd` at `date +"%Y-%m-%d %H:%M:%S"`
echo

du -k --max-depth=1 | sort -nr | awk '
BEGIN {
    split("KB,MB,GB,TB", Units, ",");
}

{
    u = 1;
    while ($1 >= 1024) {
            $1 = $1 / 1024;
            u += 1
    }

    $1 = sprintf("% *d%.1f %s", (7-length(sprintf("%.1f", $1))), 0, $1, Units[u]);
    print $0;
}' | sed 's#^[[:space:]]*0# #g'
echo

推荐阅读