سلیب فارغ از دنیا و آخرت در حال خوشگذرانی بود که ناگهان امین پیش او آمد و گفت که در پیامرسان بله خبر از گنجی به او رسیده. سلیب هم که برای مالی بادآورده جان میدهد، قبول کرد تا به دنبال گنج بگردد. برای این کار نیاز بود تا خود را با کشتی به جزیرهای برساند که در آنجا نقشهی گنج دفن شده بود.
سلیب مطمئن بود که سایتی برای خرید بلیط کشتی به ارزانترین حالت ممکن را قبلاً دیده و آن را بوکمارک کرده، اما نمیدانست که سایت را در کجای کدام مرورگر خود ذخیره کردهاست. او که به انجام ندادن کارهای خود عادت کرده، از شما خواسته تا اسکریپتی به زبان bash برای او بنویسید تا تمامی بوکمارکهای تمامی مرورگرهای سلیب را به صورت markdown درون فایلی ذخیره کند. در ادامه به بیان جزئیات بیشتر مسئله میپردازیم.
جزئیات پروژه
برای دانلود پروژهی اولیه روی این لینک کلیک کنید.
در لپتاپ شخصی سلیب مرورگرهای chrome ،opera و operagx موجود هستند.
تمامی مرورگرها بوکمارکهای خود را در ساختاری مختص به خود درون فایل json ذخیره میکنند. سلیب جهت آسانتر کردن کار شما، آدرس فایلهای مربوط به هر مرورگر را در فایلی با نام addresses.txt در کنار اسکریپت شما ذخیره کردهاست. نمونه محتوای این فایل به شکل زیر است:
operagx:./samples/operagx.json
opera:./samples/opera.json
chrome:./samples/chrome.json
توجه داشته باشید ممکن است در آدرس کاراکترهای اسپیس ( )، نقطه (.) و تیلدا (~) موجود باشد، همچنین ترتیب مرورگرها درون فایل همواره ثابت نیست ولی همواره تمامی مرورگرها درون فایل موجود هستند.
اسکریپت شما باید آدرس و تایتل تمامی سایتهای بوکمارک موجود در هر یک از این مرورگرها را بیابد و سپس موارد تکراری موجود را حذف کند و در نهایت مطابق شکل زیر، موارد را درون فایلی با نام unique_bookmarks.md ذخیره کند.
# Unique bookmarks:
| Name | URL |
|------|-----|
| {NAME} | {URL} |
| {NAME} | {URL} |
| {NAME} | {URL} |
...
توجه داشته باشید ممکن است تایتل یا نام آدرسها با " شروع یا تمام شوند. نیاز است تا شما این کاراکترها را از تایتل یا نام آدرس حذف کنید؛ اما اگر " در وسط کلمه وجود داشت شما مجاز به حذف آن نیستید. مثلاً اسکریپت شما باید تایتل """"""""I love "IRAN" so much" را به I love "IRAN" so much تبدیل کند. همچنین دقت کنید که ممکن است در بیین تایتل آنها | وجود داشته باشد؛ که این مورد هم باید حذف شود. برای مثال نام جامعه برنامهنویسان ایران | Quera در فایل opera.json باید به جامعه برنامهنویسان ایران Quera تبدیل شود.
به علامتهای نگارشی و بزرگی و کوچکی توجه کنید. خروجی اسکریپت شما باید دقیقاً برابر مقدار خواستهشده باشد.
راهحل خود را درون فایل script.sh موجود در پروژه اولیه، پیادهسازی کنید.
برای حل مسئله تنها مجاز به استفاده از دستور jq برای پارس کردن فایلهای جیسون میباشید. داکیومنتیشن این دستور در این لینک قابل مشاهده است.
نمونه اجرا
برای مثال در پروژهی اولیه، نمونهای از فایل ذخیرهشدهی بوکمارک در تمامی مرورگرهای مسئله موجود است. با اجرای اسکریپت شما، باید خروجی خواستهشده مشاهده شود:
$ ./script.sh
Reading bookmark file addresses from addresses.txt
همچنین محتوای فایل unique_bookmarks.md هم باید بهصورت زیر باشد:
# Unique bookmarks:
| Name | URL |
|------|-----|
| test 1 | https://test1.com/ |
| Intro Putting the "You" in CPU | https://cpu.land/ |
| Amazon | https://www.amazon.com/ |
| Hero Wars | https://www.hero-wars.com/ |
| Walmart | https://walmart.com/ |
| eBay | http://www.ebay.com/ |
| test 2 | https://test2.com/ |
| test 3 | https://test3.com/ |
| test 4 | https://test4.com/ |
| test 5 | https://test5.com/ |
| test 6 | https://test6.com/ |
| test 7 | https://test7.com/ |
| تاکسی اینترنتی تپسی - اپلیکیشن درخواست خودرو و پیک TAPSI | https://tapsi.ir/ |
| ترب بهترین قیمت بازار | https://torob.com/ |
| جامعه برنامهنویسان ایران Quera | https://quera.org/ |
| دیوار: بزرگترین سایت نیازمندی های رایگان در ایران | https://divar.ir/ |
| سوپر اپلیکیشن اسنپ سامانه هوشمند حملونقل تاکسی اینترنتی | https://snapp.ir/ |
| فروشگاه اینترنتی دیجیکالا | https://www.digikala.com/ |
نیازی نیست ترتیب جدول خروجی مشابه ترتیب جدول در صورت سؤال باشد و به هر ترتیب دلخواهی مجاز به تشکیل جدول هستید. تعداد سطرهای خروجی اسکریپت شما باید دقیقاً برابر با تعداد سطرهای جدول بالا باشد.
نکات مهم
- فراموش نکنید که اسکریپتی کامل را در پاسختان تحویل دهید.
- فراموش نکنید که اسکریپت خود را درون فایلی با نام
script.shوارد نمایید. - برای ارسال پاسخ خود کافیست فایل
script.shرا آپلود کنید. - خروجی و رفتار دستور
jqممکن است در توزیعهای مختلف لینوکس رفتار متفاوتی از خود نشان دهد؛ در نتیجه ترجیحا برای تست اسکریپت خود از سیستمعامل اوبونتو استفاده کنید. - سطح و level ایندنتها و همچنین فیلدهایی که در مرورگرهای مختلف،
urlیاnameرا در خود ذخیره کردهاند متفاوت است و شما باید به صورت بازگشتی چک کنید تا به پراپرتیurlیاnameبرسید و آنها را استخراج کنید.
ارسال پاسخ برای این سؤال