ট্র্যাক
/
jq
jq
/
অনুশীলনী
/
লগ লাইন পার্সার
লগ লাইন পার্সার

লগ লাইন পার্সার

লার্নিং অনুশীলনী

ভূমিকা

স্ট্রিং

মনে করুন, jq JSON-এর মতো একই ডেটা টাইপ সাপোর্ট করে। JSON স্ট্রিং-কে এভাবে বর্ণনা করে:

একটি স্ট্রিং হলো শূন্য বা ততোধিক ইউনিকোড ক্যারেক্টারের একটি ক্রম, যা ডাবল কোটের ভেতরে মোড়ানো থাকে এবং ব্যাকস্ল্যাশ এস্কেপ ব্যবহার করে লেখা হয়।

এস্কেপ সিকোয়েন্স

একটি স্ট্রিংয়ের ভেতরে "বিশেষ" ক্যারেক্টার ঢোকাতে ব্যাকস্ল্যাশ ক্যারেক্টার ব্যবহার করুন:

  • \" একটি আক্ষরিক উদ্ধৃতি চিহ্ন,
  • \\ একটি আক্ষরিক ব্যাকস্ল্যাশ,
  • হোয়াইটস্পেস ক্যারেক্টার \n, \t, \r, \f, \b
  • ইউনিকোড ক্যারেক্টার \uAAAA, যেখানে A একটি হেক্স ডিজিট

স্ট্রিংয়ের দৈর্ঘ্য

ক্যারেক্টারের সংখ্যা বের করতে length ফাংশনটি ব্যবহার করুন।

$ jq -cn --args  '$ARGS.positional[] | length' "Hello world!" "❄🌡🤧🤒🏥🕰😀"
12
7

সাবস্ট্রিং

সাবস্ট্রিং বের করতে স্লাইস নোটেশন ব্যবহার করা যায়। সিনট্যাক্স হলো .[i:j]। রিটার্ন করা সাবস্ট্রিংয়ের দৈর্ঘ্য j - i, যা ইনডেক্স i (অন্তর্ভুক্ত) থেকে ইনডেক্স j (অন্তর্ভুক্ত নয়) পর্যন্ত ক্যারেক্টার রিটার্ন করে। যেকোনো ইনডেক্স ঋণাত্মক হতে পারে, সেক্ষেত্রে এটি স্ট্রিংয়ের শেষ থেকে পিছনের দিকে গোনে। যেকোনো ইনডেক্স বাদ দেওয়া যেতে পারে, সেক্ষেত্রে এটি স্ট্রিংয়ের শুরু বা শেষ বোঝায়। ইনডেক্স শূন্য থেকে শুরু হয়।

"abcdefghij"[3:6]   # => "def"
"abcdefghij"[3:]    # => "defghij"
"abcdefghij"[:-2]   # => "abcdefgh"

কনক্যাটেনেশন

স্ট্রিং জোড়া লাগাতে + ব্যবহার করুন:

"Hello" + " " + "world!"
# => "Hello world!"

স্ট্রিংয়ের একটি অ্যারে দেওয়া হলে add ব্যবহার করুন:

["Hello", " ", "world!"] | add
# => "Hello world!"

স্প্লিট ও জয়েন

স্প্লিট করতে split/1 ফাংশনটি বা / অপারেটরটি ব্যবহার করা হয়:

"Hello beautiful world!" | split(" ")   # => ["Hello", "beautiful", "world!"]
"Hello beautiful world!" / " "          # => ["Hello", "beautiful", "world!"]

split/1-এর বিপরীত হলো join/1।

একটি স্ট্রিংকে ক্যারেক্টারের অ্যারে-তে রূপান্তর করা অনেক সময় প্রয়োজন হয়। এটি করার দুটি উপায় আছে:

  1. খালি স্ট্রিং-এ স্প্লিট করুন

    "Hi friend 😀" / ""   # => ["H","i"," ","f","r","i","e","n","d"," ","😀"]
    
  2. explode করে কোডপয়েন্ট-এর একটি অ্যারে বানান

    "Hi friend 😀" | explode   # => [72,105,32,102,114,105,101,110,100,32,128512]
    

    implode হলো explode-এর বিপরীত।

একটি সাবস্ট্রিংয়ের ইনডেক্স খুঁজে বের করা

index/1 ফাংশনটি ব্যবহার করুন; ইনডেক্স শূন্য থেকে শুরু হয়।

"hello" | index("el")'   # => 1

সাবস্ট্রিংটি যদি স্ট্রিংয়ে না থাকে, তাহলে ফলাফল null

"hello" | index("elk")   # => null

স্ট্রিং ইন্টারপোলেশন

একটি স্ট্রিংয়ের ভেতরে \(expression) সিকোয়েন্সটি ওই এক্সপ্রেশনের ফলাফল স্ট্রিংয়ের ভেতরে ঢুকিয়ে দেবে:

"The current datetime is \(now | strflocaltime("%c"))"   # => "The current datetime is Wed Nov 16 17:06:33 2022"

কেস কনভার্সন

ascii_downcase ও ascii_upcase ফাংশন দুটি ব্যবহার করুন।

রেগুলার এক্সপ্রেশন

jq-তে রেগুলার এক্সপ্রেশনের জন্য সমৃদ্ধ সাপোর্ট আছে: এটি পরের একটি পাঠের বিষয় হবে।

নির্দেশনা

এই অনুশীলনীতে আপনি লগ এন্ট্রি প্রসেস করবেন।

প্রতিটি লগ লাইন হলো একটি স্ট্রিং, যার ফরম্যাট নিচের মতো: "[<LEVEL>]: <MESSAGE>"।

এখানে তিনটি ভিন্ন লগ লেভেল আছে:

  • INFO
  • WARNING
  • ERROR

আপনার সামনে তিনটি কাজ আছে, প্রতিটিতে একটি লগ লাইন নিয়ে সেটি দিয়ে কিছু করতে বলা হবে। এই কাজগুলো সমাধান করার অনেক উপায় আছে। উপরের উদাহরণগুলো থেকে আপনার পছন্দের কৌশল বেছে নিন এবং দেখুন আপনি কী বের করতে পারেন।

1. লগ লাইন থেকে মেসেজ বের করা

লগ লাইনের মেসেজ রিটার্ন করার জন্য message ফাংশনটি ইমপ্লিমেন্ট করুন:

"[ERROR]: Invalid operation" | message
# => "Invalid operation"

শুরুতে বা শেষে থাকা যেকোনো হোয়াইট স্পেস সরিয়ে ফেলা উচিত:

"[WARNING]:  Disk almost full\r\n" | message
# => "Disk almost full"

2. লগ লাইন থেকে লগ লেভেল বের করা

লগ লাইনের লগ লেভেল রিটার্ন করার জন্য log_level ফাংশনটি ইমপ্লিমেন্ট করুন, যা ছোট হাতের অক্ষরে রিটার্ন করা উচিত:

"[ERROR]: Invalid operation" | log_level
# => "error"

3. একটি লগ লাইন নতুন করে ফরম্যাট করা

reformat ফাংশনটি ইমপ্লিমেন্ট করুন, যা লগ লাইনটি নতুন করে ফরম্যাট করে, মেসেজটি আগে বসায় আর তার পরে বন্ধনীর মধ্যে লগ লেভেল বসায়:

"[INFO]: Operation completed" | reformat
# => "Operation completed (info)"
GitHub-এর মাধ্যমে সম্পাদনা করুন লিংকটি একটি নতুন উইন্ডো বা ট্যাবে খোলে
jq Exercism

লগ লাইন পার্সার শুরু করতে প্রস্তুত?

Exercism-এ সাইন আপ করুন, jq ট্র্যাকের 12টি কনসেপ্ট75টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।