पूर्णांक के रूप में विभाजन के डिस्क उपयोग प्रतिशत को कैसे कैप्चर करें?


16

मैं एक विशेष विभाजन के डिस्क उपयोग को कैप्चर करने के लिए एक विधि चाहूंगा, जहां निर्देशिका को माउंट किया गया है। आउटपुट केवल एक पैडिंग या निम्नलिखित प्रतीकों के साथ एक पूर्णांक होना चाहिए, क्योंकि मैं इसे एक चर में सहेजना चाहता हूं।

मैंने उपयोग किया है df --output=pcent /mount/point, लेकिन आउटपुट को ट्रिम करने की आवश्यकता है क्योंकि इसमें अनावश्यक हेडर, मूल्य से पहले सिंगल स्पेस पैडिंग और मूल्य के बाद एक% प्रतीक है:

Use%
 83%

इस मामले में उत्पादन मैं चाहूँगा बस होगा 83। मैं के उत्पादन का उपयोग करने के लिए किसी भी कमियों के बारे में पता नहीं है df, लेकिन अन्य तरीकों को स्वीकार करने के लिए खुश हूं जो इस पर भरोसा नहीं करते हैं।


1
बस इसे पार्स क्यों नहीं किया?
जैकब व्लिजम

1
मुझे इसमें कोई कमी नहीं दिख रही है, आप हेडर को df के साथ हटा सकते हैं | tr -dc '0-9'

मैं सही खड़ा हूँ, मैं df से हेडर को हटाने के लिए स्विच नहीं ढूँढ सकता।

मैं मैन पेज, और जानकारी पृष्ठ को पढ़ूंगा और इसे @ bc2946088 पर भी नहीं पा सकता trथा, विचार करने के लिए अच्छा चिल्ला रहा था, मैं अपने सिर में गड़बड़ी और विचारों को जागृत कर रहा था।
एरोनिकल

3
मैंने हेडर विकल्प को हटाने के लिए भी खोज की है। मूल रूप से GNU डेवलपर्स इसे लागू करने के लिए अनिच्छुक हैं। फ़ीचर अनुरोध किए गए हैं, और उन्होंने अभी नहीं कहा है।
सर्गी कोलोडियाज़नी

जवाबों:


19

मैं उपयोग करूँगा ...

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

सुनिश्चित नहीं है कि अगर सीड तेज है, लेकिन मैं कभी भी सीड वैल्यूज को याद नहीं रख सकता।


1
timeपरीक्षण करने के लिए उपयोग करने से यह सेड के समान तेज होता है।
एरोनिकल

4
@Arronical जब तक आपके आउटपुट waaaaaaaaaaaay 100% से अधिक नहीं हैं, मुझे संदेह है कि आपको बहुत अंतर दिखाई देगा। : पी
मुरु नोव

@Arronical क्या मुरु ने कहा; आह्वान समय पर हावी होने की संभावना है।
बजे एक CVn

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

मैं एक सर्वर पर आया था, जहां --output = pcent अभी तक लागू नहीं हुआ था, इसलिए मैंने सामान्य आउटपुट का उपयोग किया, कॉलम द्वारा फ़िल्टर किया गया, इसके बाद regex: df /mount/point | awk '{print $5}' | tr -dc '0-9'


1
आपको df में -P या --portability जोड़नी चाहिए; अगर / माउंट / बिंदु लंबे समय तक है तो यह टूट जाएगा और आपको गलत मूल्य मिल जाएगा।
स्वेनड

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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.