क्या कोई मानक उपकरण है जो बाइट्स के पूर्णांक गणना को 1.00 और 1023.99 के बीच संख्यात्मक मान रखते हुए, सबसे बड़ी संभव इकाई आकार के मानव-पठनीय गणना में परिवर्तित करता है?
मेरे पास अपना बैश / awk स्क्रिप्ट है, लेकिन मैं एक मानक टूल की तलाश कर रहा हूं , जो कई / सबसे डिस्ट्रो पर पाया जाता है ... कुछ और आमतौर पर उपलब्ध होता है, और आदर्श रूप से सरल कमांड लाइन आर्ग होता है, और / या पाइप किए गए इनपुट को स्वीकार कर सकता है।
यहाँ आउटपुट के प्रकार के कुछ उदाहरण देख रहा हूँ।
1 Byt
173.00 KiB
46.57 MiB
1.84 GiB
29.23 GiB
265.72 GiB
1.63 TiB
यहाँ बाइट्स-मानव स्क्रिप्ट है (उपरोक्त आउटपुट के लिए उपयोग किया जाता है)
awk -v pfix="$1" -v sfix="$2" 'BEGIN {
split( "Byt KiB MiB GiB TiB PiB", unit )
uix = uct = length( unit )
for( i=1; i<=uct; i++ ) val[i] = (2**(10*(i-1)))-1
}{ if( int($1) == 0 ) uix = 1; else while( $1 < val[uix]+1 ) uix--
num = $1 / (val[uix]+1)
if( uix==1 ) n = "%5d "; else n = "%8.2f"
printf( "%s"n" %s%s\n", pfix, num, unit[uix], sfix )
}'
अपडेट यहां गाइल्स की स्क्रिप्ट का एक संशोधित संस्करण है , जैसा कि उनके जवाब में एक टिप्पणी में वर्णित है .. (मेरे पसंदीदा लुक के अनुरूप संशोधित)।
awk 'function human(x) {
s=" B KiB MiB GiB TiB EiB PiB YiB ZiB"
while (x>=1024 && length(s)>1)
{x/=1024; s=substr(s,5)}
s=substr(s,1,4)
xf=(s==" B ")?"%5d ":"%8.2f"
return sprintf( xf"%s\n", x, s)
}
{gsub(/^[0-9]+/, human($1)); print}'
standard tool
बनाने में एक नया है :)