【问题标题】:Sed/Awk in bash scriptbash 脚本中的 Sed/Awk
【发布时间】:2013-08-17 15:48:39
【问题描述】:

我有一些数据格式如下:

bruce   434355/512000 (84.8349609375%)
oliver   217542/512000 (42.488671875%)
kareem   236778/563200 (42.0415482954545%)

第二列中的数据以 KB 为单位,我想提取第一部分(在 / 之前)并仅显示它,如下所示:

 bruce    424.17MB (84.8349609375%)
 oliver   212.44MB (42.488671875%)
 kareem   231.24MB (42.0415482954545%)

在 sed 或 awk 中有没有办法做到这一点?

另外,我所做的是使用 awk 提取第二列,将其写入另一个文件,并在 while 循环中从每个文件中显示一行。

【问题讨论】:

    标签: bash sed awk


    【解决方案1】:
    awk '$2=$2/1024"MB"' file
    

    如果您只想保留两位小数,请执行以下操作:

    awk '{printf "%s %.2fMB %s\n", $1, $2/1024, $3 }' file
    

    【讨论】:

      【解决方案2】:

      您可以使用以下 awk 脚本:

      function human(x) {
          s="kMGTEPYZ";
          while (x>=1000 && length(s)>1)
              {x/=1024; s=substr(s,2)}
          return int(x+0.5) substr(s,1,1)
      }
      {
          split($2, a, "/");
          $2 = human(a[1]);
          print
      }
      

      将其保存到文件并以这种方式执行:

      awk -f awk.script your.txt
      

      输出是:

      bruce 424M (84.8349609375%)
      oliver 212M (42.488671875%)
      kareem 231M (42.0415482954545%)
      

      human 函数取自 https://unix.stackexchange.com/a/44087。谢谢!

      【讨论】:

        猜你喜欢
        • 2013-06-15
        • 2012-10-15
        • 1970-01-01
        • 2018-03-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-17
        • 2017-07-25
        相关资源
        最近更新 更多