Bash Scripting

إزالة الأسطر المكررة بكفاءة في Bash

Spread the love

إزالة الأسطر المكررة من ملف نصي مهمة شائعة في كتابة أوامر Bash. تستعرض هذه المقالة طريقتين فعالتين: استخدام sort و uniq، والاستفادة من قوة awk.

جدول المحتويات

استخدام sort و uniq

يقوم هذا النهج بدمج أداةين أساسيتين لنظام يونكس لحل بسيط. sort يرتب الأسطر أبجدياً، وهو شرط مسبق لـ uniq، والذي يقوم بعد ذلك بإزالة التكرارات المتتالية. يتم الحفاظ على ترتيب *الحدوث الأول* لكل سطر.

إليك الأمر:


sort file.txt | uniq > file_unique.txt

هذا ينقل الإخراج المُرتب من file.txt إلى uniq، وحفظ الأسطر الفريدة في file_unique.txt. يبقى الملف الأصلي كما هو.

مثال:

إذا كان file.txt يحتوي على:


apple
banana
apple
orange
banana
grape

سيحتوي file_unique.txt على:


apple
banana
grape
orange

استخدام الأمر awk

يوفر awk حلاً أكثر مرونة وقوة، مفيدًا بشكل خاص عندما يكون الحفاظ على الترتيب الأصلي للأسطر أمرًا بالغ الأهمية. يستخدم مصفوفة ترابطية لتتبع الأسطر التي تم مواجهتها.

الأمر مختصر بشكل ملحوظ:


awk '!seen[$0]++' file.txt > file_unique.txt

دعونا نفصله:

  • $0 يمثل السطر الحالي بالكامل.
  • seen[$0] يدخل عنصرًا في مصفوفة seen، باستخدام السطر كمفتاح.
  • ++ يزيد القيمة (0 في البداية) بعد استخدامها.
  • ! ينفي النتيجة؛ يتم طباعة السطر فقط إذا تم مواجهته لأول مرة (عندما يكون seen[$0] يساوي 0).

تحافظ هذه الطريقة على الترتيب الأصلي للأسطر.

مثال:

باستخدام نفس file.txt، سيكون الإخراج في file_unique.txt هو:


apple
banana
orange
grape

الخاتمة:

كلا الطريقتين تزيلان الأسطر المكررة بفعالية. sort | uniq أبسط في السيناريوهات الأساسية، بينما يوفر awk مرونة وتحكمًا أفضل، خاصةً للحفاظ على الترتيب الأصلي أو التعامل مع احتياجات إزالة التكرارات الأكثر تعقيدًا.

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *