গ্রেপ থেকে বিশ্রী হয়ে পাইপিং কাজ করছে না


34

আমি ফাইল লগ grepচলমান চেষ্টা করছি tailএবং nএকটি লাইন থেকে th শব্দ পেতে । উদাহরণ ফাইল:

$ cat > test.txt <<EOL
Beam goes blah
John goes hey
Beam goes what?
John goes forget it
Beam goes okay
Beam goes bye
EOL
^C

এখন যদি আমি এটি করি tail:

$ tail -f test.txt
Beam goes blah
John goes hey
Beam goes what?
John goes forget it
Beam goes okay
Beam goes bye
^C

আমি grepযে tail:

$ tail -f test.txt | grep Beam
Beam goes blah
Beam goes what?
Beam goes okay
Beam goes bye
^C

কিন্তু আমি যদি awkযে grep:

$ tail -f test.txt | grep Beam | awk '{print $3}'

আমি যতক্ষণ অপেক্ষা করি না কেন কিছুই নেই। আমার সন্দেহ হয় যে স্ট্রিমটি কাজ করে তার সাথে এটি করার কিছু something

কারও কি কোনও ক্লু আছে?

উত্তর:


55

এটি সম্ভবত গ্রেপ থেকে আউটপুট বাফারিং। আপনি এটি দিয়ে অক্ষম করতে পারেন grep --line-buffered

তবে আপনাকে গ্রেপ থেকে অজানাতে পাইপ আউটপুট দেওয়ার দরকার নেই। awk নিজে থেকে সমস্ত মিলে রেজিপেক্স প্যাটার্ন করতে পারে।

tail -f test.txt | awk '/Beam/ {print $3}'


8

ব্যবহার tail -f test.txt | awk '/Beam/{print $3}'আমার জন্য কাজ করে। পাশাপাশি tail -f test.txt | grep --line-buffered Beam | awk '{print $3}'(gnu grep) ব্যবহার করা হচ্ছে ।

এখানে সমস্যাটি যদি awkডেটা লাইন বাই লাইন বা আরও বড় ডেটা ব্লক হিসাবে প্রাপ্ত হয়। গ্রেপের জিএনইউ সংস্করণটি আরও বেশি কার্যকর হওয়ায় বৃহত্ ব্লকগুলিতে আউটপুট প্রেরণ করে তবে awkলাইন বাই লাইন আউটপুট দেওয়ার জন্য লাইন-লাইন পড়তে হবে।

এইভাবে রাখুন: grepযখন বাফারটি পূর্ণ হবে কেবল তখনই ডেটা প্রেরণ করা হবে, বাফটি সেই বাফারটি পূরণ করার জন্য অপেক্ষা করছে, সুতরাং এটি কিছুই পাঠায় না।


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