*سلیب* فارغ از دنیا و آخرت در حال خوشگذرانی بود که ناگهان *امین* پیش او آمد و گفت که در پیامرسان *بله* خبر از گنجی به او رسیده. *سلیب* هم که برای مالی بادآورده جان میدهد، قبول کرد تا به دنبال گنج بگردد. برای این کار نیاز بود تا خود را با کشتی به جزیرهای برساند که در آنجا نقشهی گنج دفن شده بود.
*سلیب* مطمئن بود که سایتی برای خرید بلیط کشتی به ارزانترین حالت ممکن را قبلاً دیده و آن را بوکمارک کرده، اما نمیدانست که سایت را در کجای کدام مرورگر خود ذخیره کردهاست. او که به انجام ندادن کارهای خود عادت کرده، از شما خواسته تا اسکریپتی به زبان `bash` برای او بنویسید تا تمامی بوکمارکهای تمامی مرورگرهای *سلیب* را به صورت *markdown* درون فایلی ذخیره کند. در ادامه به بیان جزئیات بیشتر مسئله میپردازیم.
# جزئیات پروژه
برای دانلود پروژهی اولیه روی [این لینک](/contest/assignments/68134/download_problem_initial_project/234210/) کلیک کنید.
در لپتاپ شخصی *سلیب* مرورگرهای *chrome ،opera و operagx* موجود هستند.
تمامی مرورگرها بوکمارکهای خود را در ساختاری مختص به خود درون فایل `json` ذخیره میکنند. *سلیب* جهت آسانتر کردن کار شما، آدرس فایلهای مربوط به هر مرورگر را در فایلی با نام `addresses.txt` در کنار اسکریپت شما ذخیره کردهاست. نمونه محتوای این فایل به شکل زیر است:
```text addresses.txt text
operagx:./samples/operagx.json
opera:./samples/opera.json
chrome:./samples/chrome.json
```
توجه داشته باشید ممکن است در آدرس کاراکترهای اسپیس (` `)، نقطه (`.`) و تیلدا (`~`) موجود باشد، همچنین ترتیب مرورگرها درون فایل همواره ثابت نیست ولی همواره تمامی مرورگرها درون فایل موجود هستند.
اسکریپت شما باید آدرس و تایتل تمامی سایتهای بوکمارک موجود در هر یک از این مرورگرها را بیابد و سپس موارد تکراری موجود را حذف کند و در نهایت مطابق شکل زیر، موارد را درون فایلی با نام `unique_bookmarks.md` ذخیره کند.
```markdown unique_bookmarks.md markdown
# Unique bookmarks:
| Name | URL |
|------|-----|
| <mark class="yellow" title="نام یا تایتل سایت">{NAME}</mark> | <mark class="yellow" title="آدرس سایت">{URL}</mark> |
| <mark class="yellow" title="نام یا تایتل سایت">{NAME}</mark> | <mark class="yellow" title="آدرس سایت">{URL}</mark> |
| <mark class="yellow" title="نام یا تایتل سایت">{NAME}</mark> | <mark class="yellow" title="آدرس سایت">{URL}</mark> |
<mark class="yellow" title="ممکن است ادامه داشته باشد.">...</mark>
```
**توجه داشته باشید ممکن است تایتل یا نام آدرسها با `"` شروع یا تمام شوند. نیاز است تا شما این کاراکترها را از تایتل یا نام آدرس حذف کنید؛ اما اگر `"` در وسط کلمه وجود داشت شما مجاز به حذف آن نیستید.** مثلاً اسکریپت شما باید تایتل `""""""""I love "IRAN" so much"` را به `I love "IRAN" so much` تبدیل کند. همچنین دقت کنید که ممکن است در بیین تایتل آنها `|` وجود داشته باشد؛ که این مورد هم باید حذف شود. برای مثال نام `جامعه برنامهنویسان ایران | Quera` در فایل `opera.json` باید به `جامعه برنامهنویسان ایران Quera` تبدیل شود.
به علامتهای نگارشی و بزرگی و کوچکی **توجه کنید.** خروجی اسکریپت شما باید دقیقاً برابر مقدار خواستهشده باشد.
راهحل خود را درون فایل `script.sh` موجود در پروژه اولیه، پیادهسازی کنید.
**برای حل مسئله تنها مجاز به استفاده از دستور** `jq` **برای پارس کردن فایلهای جیسون میباشید.** داکیومنتیشن این دستور در [این لینک](https://jqlang.github.io/jq/manual/) قابل مشاهده است.
<details class="blue">
<summary> **نمونه اجرا** </summary>
برای مثال در پروژهی اولیه، نمونهای از فایل ذخیرهشدهی بوکمارک در تمامی مرورگرهای مسئله موجود است. با اجرای اسکریپت شما، باید خروجی خواستهشده مشاهده شود:
```terminal Terminal terminal
$ ./script.sh
Reading bookmark file addresses from addresses.txt
```
همچنین محتوای فایل `unique_bookmarks.md` هم باید بهصورت زیر باشد:
```markdown unique_bookmarks.md markdown
# 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/ |
```
**نیازی نیست ترتیب جدول خروجی مشابه ترتیب جدول در صورت سؤال باشد و به هر ترتیب دلخواهی مجاز به تشکیل جدول هستید.** تعداد سطرهای خروجی اسکریپت شما باید دقیقاً برابر با تعداد سطرهای جدول بالا باشد.
</details>
</details>
## نکات مهم
+ فراموش نکنید که اسکریپتی کامل را در پاسختان تحویل دهید.
+ فراموش نکنید که اسکریپت خود را درون فایلی با نام `script.sh` وارد نمایید.
+ برای ارسال پاسخ خود کافیست فایل `script.sh` را آپلود کنید.
+ خروجی و رفتار دستور `jq` ممکن است در توزیعهای مختلف لینوکس رفتار متفاوتی از خود نشان دهد؛ در نتیجه ترجیحا برای تست اسکریپت خود از سیستمعامل اوبونتو استفاده کنید.
+ سطح و *level* ایندنتها و همچنین فیلدهایی که در مرورگرهای مختلف، `url` یا `name` را در خود ذخیره کردهاند متفاوت است و شما باید به صورت **بازگشتی** چک کنید تا به پراپرتی `url` یا `name` برسید و آنها را استخراج کنید.
ارسال پاسخ برای این سؤال
در حال حاضر شما دسترسی ندارید.