36 lines
1.2 KiB
Awk
36 lines
1.2 KiB
Awk
# Converts strings such as 12K, 42M, etc. into bytes.
|
|
# If def_factor is set, it's applied to values without any unit.
|
|
# If start_field or end_field are set, the conversion is applied only to the
|
|
# specified range of field numbers.
|
|
|
|
BEGIN {
|
|
if ( def_factor == 0 )
|
|
def_factor = 1;
|
|
|
|
if ( start_field == 0 )
|
|
start_field = 1;
|
|
|
|
if ( end_field == 0 )
|
|
end_field = 999999;
|
|
}
|
|
|
|
{
|
|
for ( i = 1; i <= NF; i++) {
|
|
if ( i < start_field || i > end_field ) {
|
|
printf("%s ", $i);
|
|
continue;
|
|
}
|
|
|
|
if ( match($i, "^(-?[0-9.]+)By?$") ) { $i = int(substr($i, RSTART, RLENGTH-1)); }
|
|
else if ( match($i, "^(-?[0-9.]+)[kK]i?$") ) { $i = int(substr($i, RSTART, RLENGTH-1) * 1024); }
|
|
else if ( match($i, "^(-?[0-9.]+)[mM]i?$") ) { $i = int(substr($i, RSTART, RLENGTH-1) * 1024 * 1024); }
|
|
else if ( match($i, "^(-?[0-9.]+)[gG]i?$") ) { $i = int(substr($i, RSTART, RLENGTH-1) * 1024 * 1024 * 1024); }
|
|
else if ( match($i, "^(-?[0-9.]+)[tT]e?$") ) { $i = int(substr($i, RSTART, RLENGTH-1) * 1024 * 1024 * 1024 * 1024); }
|
|
else if ( match($i, "^(-?[0-9.]+)$") ) { $i = int(substr($i, RSTART, RLENGTH) * def_factor); }
|
|
|
|
printf("%s ", $i);
|
|
}
|
|
|
|
print "";
|
|
}
|