1.00 এবং 1023.99 এর মধ্যে সংখ্যাসূচক মান বজায় রেখে এমন কোনও মানক সরঞ্জাম রয়েছে যা বাইটের একটি পূর্ণসংখ্যা গণকে বৃহত্তম সম্ভব ইউনিট-আকারের মানব-পঠনযোগ্য গণনায় রূপান্তর করে?
আমার নিজস্ব বাশ / অ্যাজক স্ক্রিপ্ট রয়েছে তবে আমি একটি স্ট্যান্ডার্ড সরঞ্জামের সন্ধান করছি যা অনেক / সর্বাধিক ডিস্ট্রোজে পাওয়া যায় ... আরও সাধারণভাবে পাওয়া যায় এবং আদর্শভাবে সাধারণ কমান্ড লাইন আরগস রয়েছে এবং / অথবা পাইপযুক্ত ইনপুট গ্রহণ করতে পারে।
আমি যে ধরণের আউটপুট খুঁজছি তার কয়েকটি উদাহরণ এখানে।
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
তৈরিতে আমাদের একটি নতুন রয়েছে :)