【问题标题】:How to show only total file size of particular extension in MB GB OR KB in solaris KSH Shell script如何在 solaris KSH Shell 脚本中仅显示特定扩展名的总文件大小(以 MB GB 或 KB 为单位)
【发布时间】:2023-12-05 12:41:01
【问题描述】:

如何在 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+=$5} {s=1;while($5>1024&&s<9){$5/=1024;s++}  printf "%6.2f %s\n",$5,v[s],$9}'`

输出:-

回显 $BACKUP_SIZE

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

所需的输出:-

66.87 GB

【问题讨论】:

  • 不要使用find ... ls -ltr。请改用du -sh PATH_TO_BACKUPS

标签: bash shell awk solaris ksh


【解决方案1】:

我相信您的输出应该在 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" )
  }' 

【讨论】:

  • 嗨 Ravinder 运行上述命令后,我得到的输出为:awk: syntax error near line 4 awk: illegal statement near line 4 awk: syntax error near line 7 awk: illegal statement near line 7
  • 根据您的建议,我使用相同的 /usr/xpg4/bin/awk , /usr/xpg6/bin/awk 但在 SUN solaris 上仍然遇到相同的错误
  • @Abhinav,你也和nawk 联系过吗?
  • 它的工作,但我得到它作为 9.97996 输出,我想要输出为 9.98GB 也可以与我的 find 命令集成