কীভাবে এডাব্লুকে দিয়ে সারি (লাইন) বিয়োগ করতে হয়


9

আমি কীভাবে আমি ডাব্লু কে কীভাবে লাইনগুলি বিয়োগ করতে পারি তা জানার চেষ্টা করছি । উদাহরণস্বরূপ, ইনপুট ফাইলটি কল্পনা করুন:

30
20

আউটপুটটি হবে:

10

এখন, পরীক্ষা হিসাবে আমি "ব্যবহৃত" মেমরি কলামটি এখান থেকে গণনা করার চেষ্টা করছি:

$ cat /proc/meminfo

তাই এই মুহুর্তে আমি এটি লিখেছি:

$ grep -P 'MemTotal|MemFree' /proc/meminfo | \
    -- Here comes the calculation using AWK

আমি নিম্নলিখিত চেষ্টা করেছি:

$ grep -P 'MemTotal|MemFree' /proc/meminfo | \
    awk '{print $2}' | awk '{$0-s}{s=$0} END {print s}' 

তবে এটি কেবল আমাকে ডেটার শেষ সারি দেয়।

আমি একটি কার্যনির্বাহী সমাধান খুঁজে পেয়েছি, তবে আমি সন্দেহ করি যে এটি সর্বাধিক অনুকূল একটি। আমার সমস্ত কোডিং অভিজ্ঞতা আমাকে বলেছে যে সারিগুলির পরিমাণের কোডিং কঠোর: পি

$ grep -P 'MemTotal|MemFree' /proc/meminfo | \
    awk '{print $2}' | awk 'NR == 1{s=$0} NR == 2 {s=s-$0} END {print s}'

এন সারি দিয়ে আপনি কী করতে চান? চূড়ান্ত ফলাফল হওয়া উচিত line1_$2 - line2_$2 - lineN-$2? আপনি কি কেবল প্রথম দুটি পরপর সারিগুলি বিয়োগ করতে চান?
টেরডন

উত্তর:


9

এছাড়াও আপনি ব্যবহার করতে পারেন awk, pasteএবং bc। আমি এই পদ্ধতিকে মনে রাখা সহজ মনে করি, এর বাক্য awkগঠনটি আমাকে সর্বদা জিনিসগুলি নিশ্চিত করার জন্য সন্ধান করা প্রয়োজন।

দ্রষ্টব্য: এই পদ্ধতির একাধিক লাইন আউটপুট প্রতিযোগিতা করতে সক্ষম হওয়া, প্রথম থেকে ২ য়, তৃতীয়, ৪ র্থ ইত্যাদি সংখ্যা বিয়োগ করার সুবিধা রয়েছে।

$ grep -P 'MemTotal|MemFree' /proc/meminfo | \
    awk '{print $2}' | paste -sd- - | bc
7513404

বিস্তারিত

উপরের ব্যবহারগুলি awkকলামটি নির্বাচন করতে ব্যবহার করে যা সংখ্যায় আমরা বিয়োগ করতে চাই।

$ grep -P 'MemTotal|MemFree' /proc/meminfo | \
    awk '{print $2}'
7969084
408432

এরপরে আমরা pasteএই 2 টি মানের মানগুলিকে একত্রিত করতে এবং তাদের মধ্যে বিয়োগ সাইন ইন যুক্ত করব।

$ grep -P 'MemTotal|MemFree' /proc/meminfo | \
    awk '{print $2}'| paste -sd- -
7969084-346660

যখন আমরা bcএটিতে পাস করি তখন গণনা সম্পাদন করে।

$ grep -P 'MemTotal|MemFree' /proc/meminfo | \
    awk '{print $2}'| paste -sd- - | bc
7513404

@ ইটারডন - ধন্যবাদ আপনি যখন এটি সম্পাদনা করেছিলেন 8-)
স্ল্যাম

3

নিখুঁতভাবে বিশ্রী সমাধান, কোনও নিরর্থক বিড়াল বা গ্রেপ আদেশ নেই:

awk '/MemTotal/ {TOT=$2} /MemFree/ {FREE=$2} END {printf("%d kB Used\n", TOT-FREE)}' /proc/meminfo

আমি দেখতে পেয়েছি awk_FTW আমাকে এতে পরাজিত করেছে তবে আমি আউটপুটটির ফর্ম্যাটিংটি সুন্দর হতে পারি।


3

এটা চেষ্টা কর:

grep -P 'MemTotal|MemFree' /proc/meminfo | \
awk 'NR==1{s=$2;next}{s-=$2}END{print s}'
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.