কিভাবে bash কমান্ড থেকে সাবস্ট্রিং পাবেন


8

কমান্ড থেকে প্রাপ্ত নিম্নলিখিত সাবস্ট্রিং দেওয়া df /dev/sdb1 | tail -n 1:

/dev/sdb1 1952971772 1441131032 511840740 74% /media/kaiman/ShareData

আমি এটিকে নিষ্ক্রিয় করতে 1952971772এবং 74%সেই স্ট্রিং থেকে এটি ব্যাশ স্ক্রিপ্টে ব্যবহার করতে চাই।

আমি জানি যে আমি কিছু কাটা কমান্ড বা কিছু ব্যবহার করতে পারি, তবে কোনও আকার পরিবর্তন হলে এটি আর কাজ করবে না।

আমি একটি রেজেক্স বা কিছু ব্যবহার সম্পর্কেও চিন্তাভাবনা করেছি, তবে আমি সর্বাধিক প্রস্তাবিত পদ্ধতির পছন্দ করতে চাই।

আগাম ধন্যবাদ!


2
আপনি কি সাধারণ কেস সম্পর্কে জিজ্ঞাসা করছেন, বা dfবিশেষত? যদি দ্বিতীয়টি হয় তবে আপনি নির্দিষ্ট আউটপুট ক্ষেত্রগুলি স্পষ্টভাবে উল্লেখ করতে পারেন যেমনdf --output=pcent /dev/sdb1
স্টিল্ড্রাইভার

2
আপনি cutলাইনে অক্ষরের অবস্থানের উপর ব্যবহার করছেন যা ফাইলের আকারে ওঠানামার সাথে লাইন দৈর্ঘ্যের পরিবর্তন হলে এটি ব্যর্থ হয়। আমি বিশ্বাস করি আপনি স্থানগুলি দ্বারা বর্ণিত cutকলাম 2এবং কলাম নির্বাচন করতে বলতে পারবেন 5তবে আমি ফোনে রয়েছি এবং কার্যকরভাবে উত্তর পোস্ট করতে পারি না।
WinEunuuchs2Unix

1
@ WinEunuuchs2 ইউনিক্স স্পেসের সংখ্যা পৃথক হতে পারে, তাই কোন কলাম-সংখ্যাটি সঠিক তা বলা শক্ত। cutপ্রতিটি ডিলিমিটারের পরে একটি কলাম দেখতে পাবে।
mook765

আমার মনে হয় কলামগুলি
ডিলাইনেটিংয়ের

@ WinEunuuchs2 ইউনিক্স সঠিক :) আমি হাতে থাকা একটি পাঠ্য ফাইলের আদেশগুলি: ডি
রিনজুইন্ড

উত্তর:


6
$ df /dev/sdb1 | awk '{ print $5 }' | tail -n 1

শতাংশের জন্য এবং

$ df /dev/sdb1 | awk '{ print $2 }' | tail -n 1

আকারের জন্য।

ছাড়া tail:

df /home | awk 'NR==2 { print $2 }'
df /home | awk 'NR==2 { print $5 }'

  • awk '{ print $2 }'
    দ্বিতীয় কলামটি পায় যেখানে একাধিক বিভাজককে 1 হিসাবে গণনা করা হয় So সুতরাং 2 র্থ কলামটি সর্বদা আপনার কমান্ডের 1 ম অংশের জন্য একই থাকে।

  • NR প্রক্রিয়াধীন রেকর্ডগুলির মোট সংখ্যা বা লাইন নম্বর দেয়।


1
অথবা আপনার যদি উভয়ই এক লাইনে প্রয়োজন হয় df /home | awk '{print $2; print $5;}'
ভিডিওনাথ

3
আওক কেবলমাত্র ব্যবহারের ENDপরিবর্তে ব্লকটিতে শেষ লাইনটি রাখেtailawk 'END { print $2,$5}'
কেভিন

এফওয়াইআই আমি আপনাকে মেটাতে
নামিয়ে

8

সম্পাদিত উত্তর

@ কেভিন যেমন বলেছিলেন, আপনি awkকেবলমাত্র সর্বশেষ লাইনটি নির্বাচন করতে এবং ব্যবহার করে লেজ ব্যবহার করা এড়াতে ENDপারেন এবং আপনি যদি একবারে দুটি কলাম মুদ্রণ করতে চান তবে আপনি এটি করতে পারেন:

df /dev/sdb1 | awk 'END {print $2,$5}'
1952971772 74%

আসল উত্তর

আপনি কেবল ২ য় কলাম নির্বাচন করতে পারেন:

$ df /dev/sdb1 | tail -1 | awk '{print $2}' 
1952971772

যেখানে $2টিএবি পৃথক কলামগুলির অবস্থান নির্দেশ করে। আপনি এটি ব্যবহার করতে পারেন cutকারণ এটি কেবলমাত্র টিএবির একমাত্র উপস্থিতি পরিচালনা করে এবং এখানে একটি কলামটি ডিলিমেট করার জন্য বহু গুণক ট্যাব রয়েছে।


3
আওক কেবলমাত্র ব্যবহারের ENDপরিবর্তে ব্লকটিতে শেষ লাইনটি রাখেtailawk 'END { print $2,$5}'
কেভিন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.