আপনি nlলাইনগুলি সংখ্যা করতে ব্যবহার করতে পারেন (এটি প্রোগ্রামের উদ্দেশ্য :)। তবে আপনাকে কোথাও থেকে মাসের প্রথম সপ্তাহটি বের করতে হবে। এটি ncalনিজে থেকেই করা যেতে পারে :
$ ncal -w 2 2012 | tail -1 | awk '{print $1}'
5
আমরা এটিকে nlবিকল্পের বিকল্পের -v(পংক্তির সংখ্যা শুরু করার জন্য ) প্যারামিটার হিসাবে সন্নিবেশ করি এবং এটি কেবল সংখ্যা বা স্পেস সহ সংখ্যা লাইনগুলিতে বলি।
$ cal 2 2012 | nl -bp'^[0-9 ]\+$' -w2 -s' ' -v$(ncal -w 2 2012 | tail -1 | awk '{print $1}')
February 2012
Su Mo Tu We Th Fr Sa
5 1 2 3 4
6 5 6 7 8 9 10 11
7 12 13 14 15 16 17 18
8 19 20 21 22 23 24 25
9 26 27 28 29
যদিও এটি সব ভয়াবহভাবে ভঙ্গুর। যাইহোক, যদি আপনার calআরও উন্নত বিকল্পগুলির প্রয়োজন না হয় তবে এটি কার্যকর হবে। আপনি এটি একটি ফাইলে রাখতে পারেন এবং "$@"আমি যেখানে রেখেছি প্রতিস্থাপন করতে পারেন 2 2012।
সম্পাদনা: তবে এটি ভুল! আমি কেবল লক্ষ্য করেছি যে জানুয়ারীর প্রথম সপ্তাহে 52 বা 53 নম্বর হতে পারে! সুতরাং আমাদের কেবল হয় জানুয়ারীর জন্য একটি ব্যতিক্রম করতে হবে, বা কেবল সমস্ত সপ্তাহের সংখ্যাগুলি থেকে বের করতে হবেncal এবং আউটপুটটিতে সেগুলি প্রয়োগ করতে হবে cal।
এই সমাধান আমি মূলত চিন্তা, কিন্তু আমি চিন্তা (ভুল) আমি ব্যবহার করে এটি প্রক্রিয়া সহজ হবে nl। এটি ব্যবহার করে paste, যা পাশাপাশি ফাইলগুলিকে মার্জ করে। যেহেতু কোনও ফাইল নেই, তাই আমাদের বাশিজম ব্যবহার করতে হবে <(...); এটাই আমি এড়াতে চাইছিলাম।
আমাদের প্রথম "ফাইল" শুরুতে দুটি খালি লাইন সহ সপ্তাহের সংখ্যাগুলির একটি তালিকা হবে:
$ printf ' \n \n' && printf '%2d \n' $(ncal -w 1 2011 | tail -1)
52
1
2
3
4
5
দ্বিতীয়টি, কেবলমাত্র আউটপুট cal। সমস্ত একসাথে, প্যারামিটার হিসাবে paste:
$ paste -d' ' <(printf ' \n \n' && printf '%2d \n' $(ncal -w 1 2011 | tail -1)) <(cal 1 2011)
January 2011
Su Mo Tu We Th Fr Sa
52 1
1 2 3 4 5 6 7 8
2 9 10 11 12 13 14 15
3 16 17 18 19 20 21 22
4 23 24 25 26 27 28 29
5 30 31
অপরটি অনেকটা মেসিয়ার এবং বেমানান। এন ফাইন ...
gcal --starting-day=Monday --with-week-numberআমার চাহিদা আরও ফিট করে তবে এই সরঞ্জামটি দুর্দান্ত।