سلیب فارغ از دنیا و آخرت در حال خوشگذرانی بود که ناگهان امین پیش او آمد و گفت که در پیامرسان بله خبر از گنجی به او رسیده. سلیب هم که برای مالی بادآورده جان میدهد، قبول کرد تا به دنبال گنج بگردد. برای این کار نیاز بود تا خود را با کشتی به جزیرهای برساند که در آنجا نقشهی گنج دفن شده بود.
سلیب مطمئن بود که سایتی برای خرید بلیط کشتی به ارزانترین حالت ممکن را قبلاً دیده و آن را بوکمارک کرده، اما نمیدانست که سایت را در کجای کدام مرورگر خود ذخیره کردهاست. او که به انجام ندادن کارهای خود عادت کرده، از شما خواسته تا اسکریپتی به زبان 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
برسید و آنها را استخراج کنید.
ارسال پاسخ برای این سؤال