إزالة الأسطر المكررة من ملف نصي مهمة شائعة في كتابة أوامر 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
مرونة وتحكمًا أفضل، خاصةً للحفاظ على الترتيب الأصلي أو التعامل مع احتياجات إزالة التكرارات الأكثر تعقيدًا.