নিম্নলিখিত আদেশ দেওয়া:
echo "1: " | awk '/1/ -F ":" {print $1}'
কেন আওক আউটপুট দেয়:
1:
নিম্নলিখিত আদেশ দেওয়া:
echo "1: " | awk '/1/ -F ":" {print $1}'
কেন আওক আউটপুট দেয়:
1:
উত্তর:
"-F" হ'ল একটি কমান্ড লাইন আর্গুমেন্টটি বিশ্রী বাক্য গঠন নয়, চেষ্টা করুন:
echo "1: " | awk -F ":" '/1/ {print $1}'
(pattern){action}
। যদি pattern
(বেশিরভাগই একটি শর্তাধীন বিবৃতি) হল সত্য , action
মৃত্যুদন্ড কার্যকর করা হয়। যদি pattern
পাওয়া না যায় true
তবে নিহিত থাকে। এখানে pattern
হয় /1/
যেখানে বলা Regex হয় 1
বর্তমান রেকর্ড মিলেছে$0
আপনি যদি এটি প্রোগ্রামক্রমে করতে চান তবে আপনি FS
ভেরিয়েবলটি ব্যবহার করতে পারেন :
echo "1: " | awk 'BEGIN { FS=":" } /1/ { print $1 }'
নোট করুন যে আপনি লুপের পরিবর্তে এটি যদি মূল লুপে পরিবর্তন করেন তবে বর্তমান লাইনটি ইতিমধ্যে বিভক্ত হয়ে গেছে বলে BEGIN
এটি পরবর্তী পংক্তিতে পড়ার জন্য প্রভাব ফেলবে ।
:
বিভাজক হিসাবে সেট করার জন্য আপনার একাধিক উপায় রয়েছে :
awk -F: '{print $1}'
awk -v FS=: '{print $1}'
awk '{print $1}' FS=:
awk 'BEGIN{FS=":"} {print $1}'
এগুলির সমস্ত সমতুল্য এবং 1
একটি নমুনা ইনপুট "1: 2: 3" এর জন্য ফিরে আসবে :
$ awk -F: '{print $1}' <<< "1:2:3"
1
$ awk -v FS=: '{print $1}' <<< "1:2:3"
1
$ awk '{print $1}' FS=: <<< "1:2:3"
1
$ awk 'BEGIN{FS=":"} {print $1}' <<< "1:2:3"
1
BEGIN
বিবৃতিটির সাথে চূড়ান্ত উদাহরণটি সবচেয়ে সঠিক হবে (সামগ্রিক awk
বাক্য গঠনের সাথে সামঞ্জস্যপূর্ণ )।
BEGIN
পুরো জিনিসটি সংরক্ষণ করার জন্য কোনও ফাইল ব্যবহার করি, তবে -F
ওয়ান-লাইনারগুলির সাথে কাজ করার সময় আমি ব্যবহার করার প্রবণতা রাখি ।
awk 'BEGIN{print split("foo:bar",a)}' FS=":" file
এবংawk 'BEGIN{FS=":"; print split("foo:bar",a)}' file
এত বেশি লেখার দরকার নেই। কেবলমাত্র আপনার পছন্দসই ক্ষেত্র বিভাজককে -F বিকল্পের সাথে awk কমান্ডে এবং আপনার উল্লিখিত ফিল্ড বিভাজক অনুযায়ী আলাদা আলাদা কলামটি প্রিন্ট করতে চান।
echo "1: " | awk -F: '{print $1}'
1
echo "1#2" | awk -F# '{print $1}'
1
Awk টেক্সট অনুবাদক হিসেবে কাজ করে যে সমগ্র নথির জন্য linewise যায় এবং প্রতিটি লাইন জন্য fieldwise যায় এইভাবে $ 1, $ 2 .. $ এন হয় প্রতিটি লাইনে ক্ষেত্র উল্লেখ ($ 1 প্রথম ক্ষেত্র, $ 2 দ্বিতীয় ক্ষেত্র এবং সেরকম ...)। কমান্ড লাইনের নীচে "FF = ..." দিয়ে দুটি বন্ধনীতে "-F" স্যুইচ ব্যবহার করে আপনি একটি ফিল্ড বিভাজককে সংজ্ঞায়িত করতে পারেন। এখন "JUERGEN" এর উত্তরটি বিবেচনা করুন:
echo "1: " | awk -F ":" '/1/ {print $1}'
ক্ষেত্রের সীমানা উপরে ":" দ্বারা সেট করা আছে সুতরাং আমাদের দুটি ক্ষেত্র রয়েছে $ 1 যা "1" এবং $ 2 যা খালি স্থান। পরে, নিয়মিত অভিব্যক্তি আসে "/ 1 /" যা ফিল্টারটিকে কেবল প্রথম ক্ষেত্রের আউটপুট করতে নির্দেশ দেয় দোভাষী যখন এই জাতীয় অভিব্যক্তিযুক্ত একটি লাইনের উপরে হোঁচট খায় (যার অর্থ 1); "প্রতিধ্বনি" কমান্ডের আউটপুট হ'ল একটি লাইন যা "1" ধারণ করে তাই ফিল্টারটি কাজ করবে ...
নিম্নলিখিত উদাহরণের সাথে কাজ করার সময়:
echo "1: " | awk '/1/ -F ":" {print $1}'
বাক্যবিন্যাসটি অগোছালো এবং দোভাষী দফতর এফ ":" উপেক্ষা করতে পছন্দ করেছেন এবং ডিফল্ট ক্ষেত্রের স্প্লিটারে স্যুইচ করে যা খালি জায়গাটি এইভাবে প্রথম ক্ষেত্র হিসাবে "1:" আউটপুট দেয় এবং দ্বিতীয় ক্ষেত্রও থাকবে না!
JUERGEN এর উত্তরে ভাল বাক্য গঠন রয়েছে ...
অথবা আপনি ব্যবহার করতে পারেন:
echo "1: " | awk '/1/{print $1-":"}'
এটি সত্যিই মজার সমীকরণ।