برنامه‌نویسی

دستورات لینوکس برای مشاهده و مرتب‌سازی فایل‌ها


۲۱ تیر ۱۳۹۹

در این مقاله قصد بررسی برخی از دستوراتی را داریم که در مشاهده و مرتب‌سازی محتوای فایل‌ها، به ما کمک خواهند کرد.

بیایید با دستور cat که به احتمال زیاد آن را بسیار دیده‌اید، شروع کنیم. دستور cat برای ترکیب و یکی‌کردن چندین فایل و یا مشاهده محتوای آن‌ها استفاده می‌شود.

۱) دستور cat

نحوه استفاده از دستور cat به شکل زیر است:

نحوه استفاده از دستور cat

بیایید با مثال این قضیه را بررسی کنیم، فرض کنید دو فایل با نام‌ها grocery1.txt و grocery2.txt داریم که هرکدام شامل لیستی از خواربارهای مختلف است.

ابتدا محتوای فایل اول را توسط دستور cat، مشاهده می‌کنیم:

مشاهده محتویات فایل grocery1.txt

از همین روش، محتویات فایل دوم را مشاهده می‌کنیم:

مشاهده محتویات فایل grocery2.txt

در مثال‌های بالا، از دستور cat <filename> برای مشاهده محتویات فایل استفاده کردیم.

اما چه می‌شود اگر بخواهیم فایل‌های بالا را ترکیب کنیم و هر دو آن‌ها را در یک فایل داشته باشیم؟

برای یکی‌کردن دو فایل بالا از روش زیر استفاده می‌کنیم:

ترکیب دو فایل grocery1.txt و grocery2.txt در فایل groceryFinal.txt

در مثال بالا، از دستور cat grocery1.txt grocery2.txt > groceryFinal.txt استفاده کردیم که در زیر به بیان بخش‌های مختلف آن می‌پردازیم:

  • cat نشان‌دهنده دستوری است که برای مشاهده محتویات فایل از آن استفاده می‌کنیم.
  • grocery1.txt grocery2.txt نام فایل‌هایی است که می‌خواهیم آن‌ها را یکی کنیم.
  • > نشان‌دهنده این است که می‌خواهیم خروجی یک دستور را به عنوان ورودی، به دستور دیگری هدایت کنیم.
  • groceryFinal.txt نشان‌دهنده نام فایل خروجی است، درواقع فایلی که می‌خواهیم نتیجه را در آن ذخیره کنیم.

برای تایید اینکه تمام محتویات این دو فایل به درستی و به صورت کامل به فایل خروجی منتقل شده است، از دستور cat groceryFinal.txt استفاده می‌کنیم تا محتویات آن را مشاهده کنیم.

اما خروجی دستور بالا، برای خواندن اندکی دشوار است، چه اتفاقی می‌افتد که اگر خروجی را در حالی که هر خط شماره دارد، مشاهده کنیم؟

بیایید آن را امتحان کنیم:

مشاهده فایل خروجی به همراه شماره هر خط

در مثال بالا از دستور cat -n groceryFinal.txt استفاده کردیم که در آن -n سوییچی است که از آن برای نمایش شماره هر خط استفاده می‌کنیم.

۲) دستور tac

دستور tac، برعکس دستور cat عمل می‌کند، به عبارتی محتویات فایل را از انتها نمایش می‌دهد. توجه کنید که محتویات فایل را تغییر نمی‌دهد، بلکه تنها آن را از انتها به ابتدا می‌خواند.

نحوه استفاده از دستور tac

برای استفاده از این دستور، کافی است این دستور را به همراه نام فایل مدنظرتان اجرا کنید.

برای مثال می‌توانیم محتویات فایل groceryFinal.txt را، که در مرحله قبل ایجاد کردیم، توسط دستور tac، به صورت برعکس مشاهده کنیم:

مشاهده محتویات فایل groceryFinal.txt، از انتها به ابتدا، توسط دستور tac

در این مثال، از دستور tac groceryFinal.txt استفاده کردیم، که باعث می‌شود محتویات فایل ذکرشده را به صورت برعکس مشاهده کردیم.

۳) دستور rev

این دستور برای برعکس‌کردن خط به خط محتوای یک فایل استفاده می‌شود. یک فایل را از بالا می‌خواند اما هر خط از محتوای آن را برعکس می‌کند و نمایش می‌دهد. تصویر زیر نمایش‌دهنده نحوه استفاده از دستور rev است:

نحوه استفاده از دستور rev

تنها کاری که باید بکنید این است که نام فایل مدنظرتان را ادامه این دستور بنویسید و آن را اجرا کنید.

بیایید فایل groceryFinal.txt را به عنوان ورودی این دستور قرار دهیم و آن را اجرا کنیم:

مشاهده محتویات فایل groceryFinal.txt به صورت برعکس توسط دستور rev

در تصویر بالا از دستور rev استفاده کردیم که هر خط از محتوای این فایل را برعکس می‌کند و نمایش می‌دهد. توجه داشته باشید که محتوای فایل تغییری نمی‌کند، بلکه تنها آن را به شیوه دیگری نمایش می‌دهد.

از نظر من این دستور هیچ کاربردی غیر از این ندارد که به قصد آزار دیگری، فایلی را با این دستور تغییر دهید و باعث سردرگمی آن شخص شوید. 🙂

۴) دستور less

دستور less این امکان را به ما می‌دهد که فایل‌های کوچک تا فایل‌های بسیار بزرگ را در ترمینال خود، به صورت صفحه‌بندی‌شده مشاهده کنیم. به صورت زیر می‌توانید از این دستور استفاده کنید:

نحوه استفاده از دستور less

با توجه به تصویر بالا، تنها کاری که نیاز است انجام دهید این است که این دستور را به همراه نام فایل مدنظرتان اجرا کنید.

دستورات و امکانات قابل استفاده در less

less امکانات و قابلیت‌های زیادی ازجمله: جست‌وجو در محتوای فایل، بالا و پایین‌رفتن در فایل تنها در محیط ترمینال و … را فراهم می‌کند.

۵) دستورات head و tail

head دستوری است که با استفاده از آن می‌توان تعداد خط مشخصی را از ابتدای فایل نمایش دهیم، به طور مثال با استفاده از توانایی این دستور می‌توانید ۵ خط ابتدایی یک فایل را مشاهده کنیم و به مابقی و ادامه آن هم کاری نداشته باشیم. در مقابل دستور tail قرار دارد که همین کار را از انتهای فایل انجام می‌دهد.

مثال زیر نحوه استفاده از دستور head به جهت مشاهده ۲ خط ابتدایی فایل groceryFinal.txt است:

مشاهده ۲ خط ابتدایی فایل groceryFinal.txt توسط دستور head

در تصویر بالا از دستور head -n 2 groceryFinal.txt استفاده کردیم، که درآن -n 2، تعداد خط‌هایی که می‌خواهیم از ابتدا نشان دهیم را مشخص می‌کند.

تصویر زیر مثالی از استفاده از دستور tail است:

مشاهده ۲ خط انتهایی فایل groceryFinal.txt توسط دستور tail

-n 2 تعداد خط‌هایی که می‌خواهیم از انتها نشان دهیم را مشخص می‌کند.

بنابراین head و tail، دستوراتی هستند که برای مشاهده بخشی از ابتدا یا انتهای یک فایل استفاده می‌شوند.

۶) دستور sort

دستور sort برای مرتب‌سازی خطوط محتوای یک فایل استفاده می‌شود. تصویر زیر نحوه استفاده از این دستور است:

نحوه استفاده از دستور sort

برای استفاده از این دستور تنها کافی است که بعد از دستور sort، گزینه‌های مدنظرتان را به همراه نام فایل مشخص کنید.

اجرای دستور sort بر روی فایل groceryFinal.txt

در مثال بالا از دستور sort groceryFinal.txt استفاده کردیم که خطوط این فایل را به صورت صعودی در حروف الفبای انگلیسی مرتب می‌کند.

اما اگر بخواهیم به صورت نزولی مرتب کنیم، باید چگونه این دستور را اجرا کنیم؟

مرتب‌کردن محتویات یک فایل به صورت نزولی با دستور sort

در مثال بالا از دستور sort -r groceryFinal.txt استفاده کردیم، که در آن سوییچ -r، مشخص می‌کند که می‌خواهیم به صورت نزولی عملیات مرتب‌سازی را انجام دهیم.

آیا می‌توانید حدس بزنید که از چه راه دیگری می‌توانیم به خروجی بالا برسیم؟

اگر حدستان دستور tac است، باید بگویم که بله، درست حدس زده‌اید. می‌توانیم خروجی دستور sort، که به طور پیشفرض به صورت صعودی است را به عنوان ورودی برای دستور tac هدایت کنیم تا خروجی مانند نتیجه مثل قبل شود sort groceryFinal.txt | tac.

اما چه اتفاقی بر سر اعداد خواهد افتاد؟ بیایید بررسی کنیم که دستور sort چه رفتاری با فایلی حاوی اعداد دارد:

اجرای دستور sort بر فایل حاوی اعداد و خروجی اشتباه

صبر کنید، نتیجه اشتباه است، اما چرا؟ دستور sort به طور پیشفرض رقم به رقم عملیات مقایسه را انجام می‌دهد و کاری به مابقی ارقام ندارد (به عبارتی تنها اولین رقم مورد مقایسه قرار می‌گیرد). با این حال برای مرتب‌سازی اعداد چه کاری باید انجام دهیم؟

تصویر زیر نحوه مرتب‌سازی اعداد داخل یک فایل توسط دستور sort است:

اجرای دستور sort بر فایل حاوی اعداد به شیوه صحیح

در مثال بالا، -n گزینه‌ای است که باعث می‌شود بتوان اعداد را مرتب کرد و در نهایت نام فایل ورودی قرار داده شده است.

برای نمایش اعداد به صورت مرتب‌شده، درحالی که موارد اضافه‌ی تکراری حذف شده‌اند (درواقع اگر عدد تکراری وجود داشته تنها یکی از آن‌ها وجود خواهد داشت و مابقی نمایش داده نخواهند شد)، می‌توانید از دستور زیر استفاده کنید:

نمایش اعداد یکتا و مرتب‌شده داخل فایل

در مثال بالا، سوییچ -un، این موضوع را نشان می‌دهد که نوع مرتب‌سازی، مرتب‌سازی اعداد با خروجی یکتا (unique) می‌باشد.

اما فایلی را تصور کنید که در آن چندین ستون داشته باشید و بخواهید خروجی را براساس دیتای موجود در یک ستون خاص مرتب کنید، در این حالت چاره چیست؟ تصویر زیر پاسخ این قضیه است:

مرتب‌سازی براساس یک ستون مشخص

در این مثال، سوییچ -k 2n به این معنا است که می‌خواهیم خروجی براساس ستون دوم که مقادیر آن عددی است، مرتب شود، درواقع -n همانند مثال‌های قبلی بیانگر مرتب‌سازی اعداد ستون دوم، توسط این دستور است.

این دستورات، دستورات پایه‌ای برای مشاهده فایل‌ها در سیستم‌عامل ‌لینوکس بودند.

منبع: https://dev.to/yashsugandh/commands-for-viewing-and-sorting-files-452j