আমার একটি সিরিয়াল বন্দরে আগত স্ট্রিম রয়েছে, প্রতি সেকেন্ডে প্রায় একবার নতুন লাইন উপস্থিত হয়
wren@Raven:~$ cat /dev/ttyUSB0
A_Sensor1,B_22.00,C_50.00
A_Sensor1,B_22.00,C_50.00
A_Sensor1,B_22.00,C_50.00
A_Sensor1,B_22.00,C_50.00
A_Sensor1,B_22.00,C_50.00
আমি ফাঁকা লাইনগুলি ছড়িয়ে দিতে এবং বাকী অংশগুলির টাইমস্ট্যাম্প করতে চাই।
সেড ফাঁকা লাইনগুলিকে টানবে এবং একটি টাইমস্ট্যাম্প যুক্ত করবে, তবে আমি টাইমস্ট্যাম্পটি আপডেট করতে পারি না, এটি কেবল যে সময়টি আহ্বান করা হয়েছিল তা প্রতিবেদন করে:
wren@Raven:~$ cat /dev/ttyUSB0 | sed -e '/^$/d' -e "s/$/`date +\,%F\,%T`/"
A_Sensor1,B_22.00,C_50.00,2014-05-14,09:44:42
A_Sensor1,B_22.00,C_50.00,2014-05-14,09:44:42
A_Sensor1,B_22.00,C_50.00,2014-05-14,09:44:42
A_Sensor1,B_22.00,C_50.00,2014-05-14,09:44:42
A_Sensor1,B_22.00,C_50.00,2014-05-14,09:44:42
A_Sensor1,B_22.00,C_50.00,2014-05-14,09:44:42
A_Sensor1,B_22.00,C_50.00,2014-05-14,09:44:42
^C
আমি টিএস, মরেটিলসের অংশ পেয়েছি এবং আপডেটিং টাইমস্ট্যাম্প পেতে এটিতে পাইপ পেতে পারি।
wren@Raven:~$ cat /dev/ttyUSB0 | ts
May 14 09:49:26 A_Sensor1,B_22.00,C_50.00
May 14 09:49:26
May 14 09:49:27 A_Sensor1,B_22.00,C_50.00
^C
তবে, আমি সিডের সাথে টিএস সঠিকভাবে একত্রিত করতে পারি না।
এটি যা দেখতে চাইছে তা করা উচিত, কোনও আউটপুট তৈরি করে না
wren@Raven:~$ cat /dev/ttyUSB0 | sed -e '/^$/d' | ts
^C
wren@Raven:~$
তবে পাইপের ক্রমকে বিপরীত করলে আউটপুট পাওয়া যায় তবে অবশ্যই লাইনগুলি আর ফাঁকা থাকে না। অন্যান্য বিকল্পগুলি সূক্ষ্মভাবে কাজ করে, তাই আমি জানি যে সেড থেকে পাইপ কাজ করছে।
wren@Raven:~$ cat /dev/ttyUSB0 | ts | sed -e '/^$/d'
May 14 10:07:25 A_Sensor1,B_22.00,C_50.00
May 14 10:07:25
May 14 10:07:26 A_Sensor1,B_22.00,C_50.00
May 14 10:07:26
^C
তাই আমি কিছুটা হতবাক। আমি সম্ভবত অবাঞ্ছিত লাইনগুলি মুছে ফেলতে পারি, তবে অপসারণের আগে সেগুলি টাইমস্ট্যাম্পিং করা অবশ্যই ভুল পদ্ধতির হতে হবে।
আমি একটি ব্যাখ্যা এবং কিছু সাহায্যের প্রশংসা করব।
sed -u
। এটি একটি ব্লক-বাফারিং বনাম লাইন-বাফারিংয়ের সমস্যা।