একটি পূর্ণসংখ্যা হিসাবে পার্টিশনের ডিস্ক ব্যবহারের শতাংশ কীভাবে ক্যাপচার করবেন?


16

পার্টিশনটি মাউন্ট করা ডিরেক্টরিটি ব্যবহার করে একটি বিশেষ পার্টিশনের ডিস্ক ব্যবহার ক্যাপচার করার জন্য আমি একটি পদ্ধতি চাই। আউটপুটটি কেবল কোনও প্যাডিং বা নিম্নলিখিত চিহ্নগুলির সাথে একটি পূর্ণসংখ্যার হওয়া উচিত, কারণ আমি এটি একটি পরিবর্তনশীলে সংরক্ষণ করতে চাই।

আমি ব্যবহার করেছি df --output=pcent /mount/point, তবে আউটপুটটি ছাঁটাই করা দরকার কারণ এতে একটি অপ্রয়োজনীয় শিরোলেখ, মানের আগে একক স্পেস প্যাডিং এবং এর মতো মান অনুসরণ করে একটি% চিহ্ন রয়েছে:

Use%
 83%

এই ক্ষেত্রে আমি চাই আউটপুট সহজ হবে 83। আমি আউটপুট ব্যবহার করার ক্ষেত্রে কোনও অসুবিধা সম্পর্কে অবগত নই df, তবে অন্যান্য উপায়গুলি যে এটির উপর নির্ভর করে না তা গ্রহণ করে আমি খুশি am


1
কেন কেবল এটিকে পার্স করবেন না?
জ্যাকব ভ্লিজম

1
আমি কোনও ত্রুটি দেখতে পাচ্ছি না, আপনি তখন df দিয়ে হেডার সরাতে পারেন remove tr -dc '0-9'

আমি সংশোধন করে দাঁড়িয়েছি, df থেকে শিরোলেখ সরাতে আমি স্যুইচটি পাই না।

আমি ম্যান পৃষ্ঠাটি এবং তথ্য পৃষ্ঠাটি পড়তে পারি এবং এটি @ বিসি 2946060 কেও খুঁজে পাচ্ছিলাম না, বিবেচনা করার জন্য ভাল চেঁচামেচির tr, আমি উপদ্রব এবং বিশ্রী ধারণার সাথে একটি জগাখিচুড়ি করে আমার মাথা পেয়ে যাচ্ছিলাম।
অ্যারোনিকাল

3
আমি হেডার অপশনটি সরিয়েও অনুসন্ধান করেছি। মূলত জিএনইউ বিকাশকারীরা এটি প্রয়োগ করতে নারাজ। বৈশিষ্ট্য অনুরোধ আছে এবং তারা ঠিক না বলেছে।
সের্গেই কোলোডিয়াজনি

উত্তর:


19

আমি ব্যবহার করতাম ...

df --output=pcent /mount/point | tr -dc '0-9'

সেড দ্রুত হয় কিনা তা নিশ্চিত নয় তবে আমি সেডের মানগুলি কখনই মনে করতে পারি না।


1
timeএটি পরীক্ষার জন্য ব্যবহার করা ঠিক সেডের মতোই দ্রুত হিসাবে প্রকাশিত হয়।
অ্যারোনিকাল

4
আপনার আউটপুটগুলি 100% এরও বেশি না হলে @ অ্যারোনিকাল আপনার সন্দেহ হয় যে আপনি অনেক পার্থক্য দেখতে পাবেন। : পি
মুড়ু

@ আরোনিকাল মুরু কি বলেছে; অনুরোধের সময়টি প্রাধান্য পাবে।
একটি সিভিএন

1
এই উদাহরণে, trচেয়ে পড়া সহজ sed
ধানের ল্যান্ডাউ

7

এখানে বিশ্রী সমাধান:

$ df --output=pcent /mnt/HDD | awk -F'%' 'NR==2{print $1}'   
 37

মূলত এখানে যা ঘটে তা হ'ল আমরা '%' অক্ষরটিকে ক্ষেত্র বিভাজক (কলাম ডিলিমিটার) হিসাবে গণ্য করি এবং প্রথম কলাম $ 1 মুদ্রণ করি কেবল তখনই রেকর্ডের সংখ্যা দুটি ( NR==2অংশ) এর সমান হয়

আমরা যদি কেবলমাত্র bashসরঞ্জাম ব্যবহার করতে চাই, আমরা এরকম কিছু করতে পারি:

bash-4.3$ df --output=pcent / | while IFS= read -r line; do 
>     ((c++)); 
>     [ $c -eq 2 ] && echo "${line%\%*}" ;
> done
 74

এবং মজাদার জন্য, sedক্যাপচার গ্রুপের মাধ্যমে এবং -rবর্ধিত রেজেক্সের বিকল্প:

df --output=pcent | sed -nr '/[[:digit:]]/{s/[[:space:]]+([[:digit:]]+)%/\1/;p}'

6

sed সমাধান

df --output=pcent /mount/point | sed '1d;s/^ //;s/%//'
  • 1d প্রথম লাইন মুছুন
  • ; পৃথক কমান্ড
  • s/^ // লাইনের শুরু থেকে একটি স্থান সরান
  • s/%//%সাইন অপসারণ

6

আপনি grepকেবলমাত্র অঙ্কগুলি বের করে এমন কোনওটিতে পাইপ করতে পারেন :

df --output=pcent /mount/point | grep -o '[0-9]*'

এটি সরাসরি দেখুন:

$ echo "Use%
> 83%" | grep -o '[0-9]*'
83

1

আমি এমন একটি সার্ভারে এসে পৌঁছেছি যেখানে - আউটপুট = অজানা এখনও প্রয়োগ করা হয়নি, তাই আমি কলাম দ্বারা ফিল্টারকৃত সাধারণ আউটপুট ব্যবহার করলাম, তারপরে রেজেক্স: df /mount/point | awk '{print $5}' | tr -dc '0-9'


1
আপনার ডিএফ -P বা --portable যুক্ত করা উচিত; অন্যথায় যদি / মাউন্ট / পয়েন্টটি দীর্ঘ হয় তবে এটি ব্রেক হয়ে যাবে এবং আপনি ভুল মান পেতে পারেন।
সোভেনডে

1

দ্বি-পদক্ষেপ সমাধান বাশ

গত বছর কিছুটা বাশ (বোর্ন অ্যাগেইন শেল) ভক্ত হয়েও আমি ভেবেছিলাম এটি ব্যবহার করে সমাধানের প্রস্তাব দেব।

$ DF_PCT=$(df --output=pcent /mnt/d)
$ echo ${DF_PCT//[!0-9]/}
5
  • লাইন 1 dfআউটপুটটিকে ভেরিয়েবলের ক্যাপচার করে DF_PCT
  • লাইন 2 এমন সমস্ত কিছু ফেলা করে যা কোনও ডিজিট নয় DF_PCTএবং এটি স্ক্রিনে প্রদর্শন করে।
  • গৃহীত উত্তরের চেয়ে সুবিধা হ'ল শতাংশের পরে লাইন ফিড ( 5এই ক্ষেত্রে) উত্পন্ন হয়।

1

এখানে আরও একটি সমাধান দেওয়া হল:

df | grep /mount/point | awk '{ print $5 }' | cut -d'%' -f1
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.