Awk এর সাথে মিল রেখে রেকর্ড গণনা করুন


13

সুতরাং আমাকে বলা হয়েছিল last > lastloggedinযা একটি ফাইল তৈরি করে যা ক্লাসটি সর্বশেষ সিস্টেমের পুনরায় বুট হওয়ার পরে সর্বশেষ লগইন দেখায় এবং এখন আমাকে একটি Awk স্ক্রিপ্ট লিখতে বলা হয়েছে যা নামকরণ myawkকরে / নির্ধারণ করে lastloggedinযে স্ট্রিংটি কয়টি লাইনে রেখেছে তা নির্ধারণ করে CFS264

আমি করেছি grep -c CFS264 lastloggedin


আপনার কি ব্যবহার করতে হবে awk? যদি না হয়, আপনি কেবল ব্যবহার করতে পারেন grep -c CFS264 lastloggedin | wc -l
এক্সেল

2
@ অ্যাক্সেল: সর্বদা "1" উত্পাদন grep -c (something) (something) | wc -lকরবে ।
জি-ম্যান

উত্তর:


21

আপনাকে শুরু করতে awkআপনি কোনও ফাইলটিতে লাইনগুলি অনুসন্ধান করতে ব্যবহার করতে পারেন যার মধ্যে স্ট্রিং রয়েছে:

$ awk '/CFS264/ { .... }' lastloggedin

বিটের বিটগুলি { .... }হ'ল স্ট্রিংটির সাথে রেখার সংখ্যা নির্ধারণের জন্য প্রয়োজনীয় কমান্ডগুলি। উপরের কাজ করছে তা নিশ্চিত করার জন্য আপনি print $0সন্ধানের স্ট্রিং রয়েছে এমন লাইনগুলি মুদ্রণ করতে সেখানে একটি ব্যবহার করতে পারেন ।

$ awk '/CFS264/ { print $0 }' lastloggedin

গণনা হিসাবে, আপনি যদি "অ্যাডকিউ কাউন্টার" অনুসন্ধান করেন আপনি এই এসও প্রশ্নোত্তর শিরোনামে হোঁচট খাবেন : রেকর্ডের কোনও সংখ্যা গণনা করতে বিশুদ্ধ ব্যবহার করে । সেখানে প্রদর্শিত পদ্ধতিটি আপনার বর্ণনা অনুসারে যথেষ্ট হবে:

$ awk '/CFS264/ {count++} END{print count}' lastloggedin

উদাহরণ

$ last > lastloggedin

$ awk '/slm/ {count++} END {print count}' lastloggedin 
758

$ grep slm lastloggedin  | wc -l
758

$ grep -c slm lastloggedin
758

দ্রষ্টব্য: আপনি আউটপুটে কোন ফিল্ড CFS264 এর সাথে সম্পর্কিত তা বলবেন না last। এটি একটি ব্যবহারকারীর নাম ধরে নিলে আপনি awkকেবল সেই ক্ষেত্রটি অনুসন্ধান করতে কমান্ডকে আরও সীমাবদ্ধ করতে পারবেন :

$ awk '$1=="CFS264" { print $0 }' lastloggedin

দুঃখিত, cfs264 একটি ব্যবহারকারীর অংশ। আপনারা এই সময়টি আমাকে বুঝতে সাহায্য করার জন্য ধন্যবাদ আপনাকে, আমি বেশ বিভ্রান্ত এবং হতাশ হয়ে পড়েছিলাম।
তাইশানস

@ তাশশানস - এনপি, আপনাকে বেশ স্বাগতম, কিউ এবং আপনাকে শুভকামনার জন্য ধন্যবাদ awk
slm

5

নিম্নলিখিত উদাহরণটি lastloggedinফাইলের প্রয়োজন ছাড়াই আমার উল্লেখ করা সময়ের গণনা করে :

$ last | awk '$1=="yeti" { ++count } END { print count }' 
106

আপনি যদি lastloggedinফাইলটি ব্যবহারে জোর দিয়ে থাকেন বা ফাইলটি ব্যবহার করতে বাধ্য হন তবে আপনি এটি এইভাবে করতে পারেন:

$ last > lastloggedin
$ awk '$1=="yeti" { ++count } END { print count }' lastloggedin
106

ব্যবহার করুন $1~/some_chars/সকল ব্যবহারকারী নাম দেওয়া অক্ষর containig বা পেতে $1~/^prefix/দিয়ে শুরু কেবল নাম মেলে prefix:

$ last | awk '$1~/et/ { ++count } END { print count }'
106
$ last | awk '$1~/^ye/ { ++count } END { print count }'
106


পুনশ্চ:

man awkআরও ইঙ্গিতগুলির জন্য স্ক্যান করুন ... ;-)

awk খুব পুরষ্কারজনক: আপনি শেখার খুব অল্প সময়ের পরে প্রচুর স্টাফ করতে পারেন ...


2

সর্বশেষে পূর্ববর্তী রিবুটগুলি থেকে ব্যবহারকারীদের লগইন অন্তর্ভুক্ত থাকতে পারে। এই হিসাবে, নিম্নলিখিতগুলি পুনরায় বুট করার পরে কেবল ব্যবহারকারীদের মুদ্রণ করবে:

last | awk 'NR==1,$1=="reboot"{if ($1 ~ /cfs264/ ) { count+=1; }}END{ print count; }'

Awk কমান্ডের প্রথম অংশটি একটি সীমা নির্দিষ্ট করে - প্রথম সারি থেকে শুরু করে প্রথম কলামটি 'রিবুট' না হওয়া পর্যন্ত।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.