إذا كان ملف CSV المجمع يكرر عناوين أعمدته بين الدفعات، فيمكنك إنشاء إجراء سريع في Finder يحتفظ بالسطر الأول ويزيل الأسطر اللاحقة التي تطابقه تماماً. يقوم الإجراء أدناه بإنشاء ملف منفصل باسم .cleaned.csv بجانب كل ملف محدد، تاركاً الملف الأصلي دون تعديل. وهو يعمل مع عمليات تصدير CSV العادية حيث يشغل كل سجل سطراً واحداً؛ ولا يحلل كل تنسيقات CSV الصالحة.

ما سيقوم به الإجراء السريع

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

تستخدم هذه الطريقة أداة awk المدمجة في macOS من خلال إجراء تشغيل برنامج نصي لـ shell في Automator. توثق Apple كلاً من إنشاء إجراءات Finder السريعة وإضافة برامج shell النصية إلى مهام سير عمل Automator. إنشاء سير عمل إجراء سريع · استخدام إجراء برنامج نصي لـ shell في سير عمل Automator

إنشاء الإجراء السريع في Finder

  1. افتح Automator، واختر ملف > جديد، ثم حدد إجراء سريع، وانقر فوق اختيار.
  2. في الجزء العلوي من سير العمل، اضبط يتلقى سير العمل الحالي على ملفات أو مجلدات واضبط التطبيق على Finder.
  3. ابحث عن تشغيل برنامج نصي لـ shell في مكتبة الإجراءات واسحبه إلى سير العمل.
  4. اضبط Shell على /bin/zsh وتمرير الإدخال على كوسيطات. الصق البرنامج النصي أدناه داخل الإجراء.
for file in "$@"; do
    if [ ! -f "$file" ]; then
        printf 'Not a regular file: %s\n' "$file" >&2
        exit 1
    fi

    output="${file}.cleaned.csv"
    if [ -e "$output" ]; then
        printf 'Output already exists; skipped: %s\n' "$output" >&2
        exit 1
    fi

    temporary=$(mktemp "${file}.tmp.XXXXXX") || exit 1
    if awk 'NR == 1 { header = $0; print; next }
            $0 != header { print }' "$file" > "$temporary"; then
        if ! mv "$temporary" "$output"; then
            rm -f "$temporary"
            exit 1
        fi
    else
        rm -f "$temporary"
        exit 1
    fi
done

احفظ سير العمل باسم مثل إزالة عناوين CSV المتكررة. يتم إنشاء الملف المؤقت بجانب الملف المصدر، ثم يُنقل إلى اسم ملف الإخراج بعد المعالجة. وإذا كان ملف الإخراج هذا موجوداً بالفعل، سيتوقف البرنامج النصي بدلاً من استبداله. ولا يتم استهداف الملف المدخل الأصلي للكتابة عليه أبداً.

تشغيله والتحقق من النتيجة

في Finder، حدد ملفاً أو أكثر من ملفات CSV، وافتح القائمة السياقية إجراءات سريعة، واختر إزالة عناوين CSV المتكررة. ابحث بجانب كل ملف مصدر عن ملف ينتهي بـ .cleaned.csv. افتح النتيجة في محرر نصوص أو برنامج جداول بيانات وتأكد من أنه لا يزال يحتوي على عنوان واحد وأن الصفوف الواقعة قبل كل عنوان متكرر وبعده تظل موجودة. لا يعرض سير العمل رسالة اكتمال مخصصة؛ لذا فإن عدم إنشاء الملف قد يعني أن المخرجات كانت موجودة بالفعل أو حدث خطأ أثناء المعالجة.

المقارنة مطابقة تماماً: فالعنوان الذي يختلف في حالة الأحرف أو المسافات أو علامات الترقيم أو علامات الاقتباس يُعامل كسطر مختلف وسيظل موجوداً. هذا القيد مقصود هنا؛ لتجنب التخمين بشأن أي الصفوف تُعتبر عناوين عندما يتباين نص الملف.

متى تكون هذه الطريقة القائمة على الأسطر غير مناسبة

يمكن أن يحتوي ملف CSV على حقول محاطة بعلامات اقتباس تتضمن أحرف سطر جديد مدمجة. في هذه الحالة، قد يمتد سجل CSV المنطقي عبر عدة أسطر مادية، بينما تعالج أداة awk المدخلات كسطور منفصلة. قد يخطئ هذا البرنامج النصي حينها ويعتبر سطراً داخل حقل ما بمثابة سجل أو يتسبب في إفساد الملف. يوضح دليل macOS الخاص بأداة awk معالجتها الموجهة نحو الأسطر؛ بالنسبة لملفات CSV متعددة الأسطر، استخدم بدلاً من ذلك أداة تفهم بنية CSV وتدعم تنسيق الملف. دليل macOS لأداة awk

كذلك لا يقوم هذا الإجراء السريع بضبط المسافات البيضاء أو إزالة التطابقات التقريبية أو فحص أسماء الأعمدة أو دمج الملفات. إنه مناسب لعملية تنظيف محددة: إزالة التكرارات المطابقة تماماً للسطر المادي الأول من عمليات تصدير CSV القائمة على الأسطر مع الحفاظ على الملف المصدر للمراجعة.

المصادر