হালনাগাদ:
এখানে একটি নতুন বাস্তবায়ন রয়েছে যা dc
এর "আউটপুট বেস" ব্যবহার করে । মনে রাখবেন যে মোট যোগফল 60 ঘন্টাের বেশি হলে এটি তিনটির পরিবর্তে চারটি স্থান-বিভাজিত মান আউটপুট করবে । (এবং যদি মোট যোগফল এক ঘণ্টারও কম হয় তবে কেবল দুটি স্পেস-বিভাজিত মান আউটপুট হবে))
awk '{print $2}' file.txt | tr : \ | dc -f - -e '60o0ddd[+r60*+r60d**+z1<a]dsaxp'
প্রশ্নের ইনপুটটি ঘন্টা, মিনিট, সেকেন্ডের ত্রিগুণে অনুমান করা হয়।
প্রদত্ত ইনপুটটির আউটপুট হ'ল:
16 43
আসল উত্তর:
আসুন dc
আপনার ডেস্ক ক্যালকুলেটর দিয়ে এটি করুন। এটি এর শেষ প্রান্তে bc
এবং এটি অত্যন্ত নমনীয় যদিও প্রায়শই ক্রিপ্টিক হিসাবে বিবেচিত হয়।
প্রথমে কিছু সময় দেওয়ার জন্য কিছু প্রাক-প্রক্রিয়াজাতকরণ এবং কলোনগুলিকে স্পেসে রূপান্তরিত করতে:
awk '{print $2}' | tr : ' '
আমরা শেডের সাথে এটিও করতে পারি:
sed -En -e 's/^.*([0-9][0-9]):([0-9][0-9]):([0-9][0-9]).*$/\1 \2 \3/p'
আমি ওওকের সাথে যাব এবং tr
এটি সহজ। উপরের কমান্ডের যে কোনওটি নীচের বিন্যাসে একটি পরিষ্কার আউটপুট উত্পাদন করে। (আমি আমার নিজস্ব পাঠ্যটি ব্যবহার করছি কারণ আমি এটিকে আরও আকর্ষণীয় মনে করি; এতে কয়েক ঘন্টা অন্তর্ভুক্ত রয়েছে rs আপনার কাজগুলিও কাজ করবে))
$ cat input
9 39 42
8 04 50
7 49 32
10 01 54
7 19 18
উপরের ফর্ম্যাটটিতে সময় দেওয়া হয়েছে, সেগুলিকে নিম্নলিখিত শেড স্ক্রিপ্টের মাধ্যমে চালনা করুন এবং ফলাফলটি dc
প্রদর্শিত হিসাবে পাইপ করুন :
sed -e '1s/^/0 /' -e 's/$/ r 60 * + r 60 60 * * + +/' -e '$s/$/ 60 60 * ~ 60 ~ f/' input | dc
(পাশের দিকে স্ক্রোলিং হ্রাস করতে ভাঙ্গা :)
sed <input \
-e '1s/^/0 /' \
-e 's/$/ r 60 * + r 60 60 * * + +/' \
-e '$s/$/ 60 60 * ~ 60 ~ f/' |
dc
ফলাফলটি সেকেন্ড, মিনিট, ঘন্টা হবে ence (দ্রষ্টব্য এটি একটি বিপরীত ক্রম।) আমি কেবল শিখছি dc
সুতরাং এটি কোনও নিখুঁত সমাধান নয়, তবে আমি মনে করি এটি প্রথম দেখার জন্য এটি বেশ ভাল dc
।
আমার টার্মিনাল থেকে সরাসরি আটকানো ইনপুট এবং আউটপুট উদাহরণ:
$ cat input
9 39 42
8 04 50
7 49 32
10 01 54
7 19 18
$ sed -e '1s/^/0 /' -e 's/$/ r 60 * + r 60 60 * * + +/' -e '$s/$/ 60 60 * ~ 60 ~ f/' input | dc
16
55
42
$