2

我有一些数据格式如下:

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 循环中从每个文件中显示一行。

4

2 回答 2

4
awk '$2=$2/1024"MB"' file

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

awk '{printf "%s %.2fMB %s\n", $1, $2/1024, $3 }' file
于 2013-08-15T12:51:49.053 回答
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-08-15T13:07:20.423 回答