এটি করার একটি উপায় এখানে রয়েছে awk
(আপনার উত্তরের কোড অনুসারে পুরো আউটপুট)।
আপনি যখন একই ইনপুটটিকে বারবার পুনরায় প্রসেস করতে থাকেন তখন এটি সাধারণত নির্দেশ করে যে অন্য পদ্ধতির আরও ভাল হতে পারে।
awk
এই জাতীয় পাঠ্য ইনপুট প্রক্রিয়াজাতকরণ জন্য নিখুঁত। awk
প্রোগ্রামগুলি করা জিনিসগুলির চেয়ে অনেক দীর্ঘ হয় sed
তবে এগুলি পড়া সহজ হয় এবং আপনি ডিবাগিংকে আরও সহজ করতে তাদের মুদ্রণ বিবৃতি যুক্ত করতে পারেন ।
আমি আমার ডিবাগিং বিবৃতিগুলিতে রেখেছি (মন্তব্য করা)। স্ক্রিপ্টটি কীভাবে কাজ করে তা দেখার জন্য আপনি তাদেরকে অসুবিধা করতে পারেন।
আপনাকে awk
প্রোগ্রামটি কোথাও রাখতে হবে এবং একক ব্যবহারের ক্ষেত্রে সবচেয়ে সহজ জায়গা হ'ল পুরো জিনিসটি একক উদ্ধৃত স্ট্রিংয়ে awk
কমান্ড লাইনে রেখে দেওয়া।
এইভাবে আপনাকে এটি আলাদা ফাইল বা অস্থায়ী ফাইলে সংরক্ষণ করতে হবে না, সুতরাং কোনও ফাইল পরিচালনার সাথে জড়িত নেই এবং স্ক্রিপ্টটি নিজেই দাঁড়াবে।
এই প্রোগ্রামটি দীর্ঘ দেখাচ্ছে, তবে এটি প্রায় সমস্ত মন্তব্য, ডিবাগিং বিবৃতি এবং সাদা স্থান।
#!/bin/bash
## Whole awk program is one single quoted string
## on the awk command line
## so we don't need to put it in a separate file
## and so bash doesn't expand any of it
## Debugging statements were left in, but commented out
/usr/bin/cpuid | awk '
BEGIN { ## initialize variables - probably unnecessary
em = ""
ef = ""
fa = ""
mo = ""
si = ""
ps = ""
}
## get each value only once
## extended model is in field 4 starting at the third character
## of a line which contains "extended model"
/extended model/ && em == "" {
em = substr($4, 3)
##print "EM " em
}
## extended family is in field 4 starting at the third character
## of a line which contains "extended family"
/extended family/ && ef == "" {
ef = substr($4, 3)
##print "EF " ef
}
## family is in the last field, starting at the second character
## and is two characters shorter than the field "()"
## of a line which starts with "family"
## (so it does not match "extended family")
$1 == "family" && fa == "" {
##print NF " [" $NF "]"
##print "[" substr($NF, 2) "]"
l = length($NF) - 2
fa = substr($NF, 2, l)
##print "FA " fa
}
## model is in the third field, starting at the third character
## of a line which starts with "model"
## (so it does not match "extended model")
$1 == "model" && mo == "" {
mo = substr($3, 3)
##print "MO " mo
}
## stepping id is in field 4 starting at the third character
## of a line which contains "stepping id"
/stepping id/ && si == "" {
si = substr($4, 3)
##print "SI " si
}
## processor serial number is in field 4 starting at the third character
## of a line which contains "processor serial number:"
/processor serial number:/ && ps == "" {
ps = $4
##print "PS " ps
}
## Quit when we have all the values we need
em != "" && ef != "" && fa != "" && mo != "" && si != "" && ps != "" {
exit
}
END {
print em ef fa mo si " " ps
}
'