use*_*723 2 perl awk sed sh du
我经常在没有-h标志的unix盒子上工作.
我正在寻找一个单行转换KB转换为人类可读.Perl似乎是个不错的选择.
这就是我到目前为止所拥有的.
@a=split /\s+/;
$x=$_!=0?int(log()/log(1024)):0;
@b=('K','M','G');
printf("%.3s%s\t%s\n",$_/(1024)**$x,$b[$x],$a[1]);
Run Code Online (Sandbox Code Playgroud)
像这样运行:
du -ks * | perl -lne '@a=split /\s+/;$x=$_!=0?int(log()/log(1024)):0;@b=('K','M','G');printf("%.3s%s\t%s\n",$_/(1024)**$x,$b[$x],$a[1]);'
Run Code Online (Sandbox Code Playgroud)
它无法正常工作,因为我无法找到正确的printf格式.
使用perl以及awk/sed等的单行将是最有用的.
这就是du -h的样子.最大1位小数.最小值:0位小数.随着舍入.
8.0K
1.7M
4.0M
5.7M
88K
Run Code Online (Sandbox Code Playgroud)
更新:
du -ks * | perl -lane '$F[0];$x=$_!=?int(log()/log(1024)):0;printf("%.3s%s\t%s\n",$_/1024**$x,qw<K M G>[$x],$F[1]);'
Run Code Online (Sandbox Code Playgroud)
这用于Number::Bytes::HumanCPAN:
du -ks * |perl -MNumber::Bytes::Human=format_bytes -nle \
'@F=split(/\s+/,$_,2); printf("%-10s%s\n", format_bytes($F[0]*1024), $F[1])'
Run Code Online (Sandbox Code Playgroud)
编辑:不使用模块:
du -ks * |perl -nle \
'@F=split(/\s+/,$_,2); $b=$F[0]*1024; for($i=0;$b>1024;$i++){$b/=1024} $u=qw{B K M G T}[$i]; printf("%10.".($b=~/\./?1:0)."f$u %s\n", $b, $F[1])'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2078 次 |
| 最近记录: |