如何在 solaris KSH Shell 脚本中仅显示特定扩展名的总文件大小(以 MB GB 或 KB 为单位)

How to show only total file size of particular extension in MB GB OR KB in solaris KSH Shell script

如何在 sun solaris KSH Shell 脚本中仅显示特定扩展名的总文件大小(以 MB GB 或 KB 为单位)我已经尝试过 AWK 命令,下面是命令:-

BACKUP_SIZE=`find $EXPDP_DIR_PATH -name "DotNet_LI_TRADES_pre_release_*_12092017.log" -exec ls -ltr {} \; | awk ' BEGIN{split("B KB MB GB TB PB EB ZB YB",v)} {s+=} {s=1;while(>1024&&s<9){/=1024;s++}  printf "%6.2f %s\n",,v[s],}'`

输出:-

回声$BACKUP_SIZE

681.02 MB 682.54 MB 552.33 MB 1.77 GB 5.92 GB 374.07 MB

期望输出:-

66.87 GB

我相信你的输出应该在左右 9.9 GB 似乎是打字错误。如果您的 Input_file 与显示的示例相同,那么以下内容也可能对您有所帮助。

BACKUP_SIZE="681.02 MB 682.54 MB 552.33 MB 1.77 GB 5.92 GB 374.07 MB"
echo $BACKUP_SIZE | 
  nawk '{
    for (i=2;i<=NF;i+=2) {
      if ($i=="MB") {
        val=val?val+$(i-1)*.001 : $(i-1)*.001
      } else {
        val=val?val+$(i-1) : $(i-1)
      }
    }
  }
  END { print val }' 

由于您在这个问题上添加了 Solaris,因此在此处添加:在 Solaris/SunOS 系统上,将 awk 更改为 /usr/xpg4/bin/awk/usr/xpg6/bin/awknawk

编辑: 由于 OP 需要在 2 个浮点数中得到答案,因此以下内容可能对您有所帮助。

echo $BACKUP_SIZE |
  nawk '{
    for(i=2;i<=NF;i+=2) {
      if ($i=="MB") {
        val=val?val+$(i-1)*.001 : $(i-1)*.001
      } else {
        val=val?val+$(i-1) : $(i-1)
      }
    }
  }
  END { 
    printf("%.02f %s\n", val, "GB" )
  }'