إذا كان ملف CSV المجمع يكرر عناوين أعمدته بين الدفعات، فيمكنك إنشاء إجراء سريع في Finder يحتفظ بالسطر الأول ويزيل الأسطر اللاحقة التي تطابقه تماماً. يقوم الإجراء أدناه بإنشاء ملف منفصل باسم .cleaned.csv بجانب كل ملف محدد، تاركاً الملف الأصلي دون تعديل. وهو يعمل مع عمليات تصدير CSV العادية حيث يشغل كل سجل سطراً واحداً؛ ولا يحلل كل تنسيقات CSV الصالحة.
ما سيقوم به الإجراء السريع
يقوم سير العمل بمقارنة الأسطر الكاملة، وليس حقول CSV الفردية. حيث يحفظ السطر الأول كعنوان، وينسخه إلى المخرجات، ثم يتخطى أي سطر لاحق مطابق تماماً لذلك العنوان. تظل الصفوف الأخرى بترتيبها الأصلي، بما في ذلك صفوف البيانات المتكررة. ويعد هذا خياراً عملياً عندما تُدرج دفعات التصدير نفس العنوان بين السجلات.
تستخدم هذه الطريقة أداة awk المدمجة في macOS من خلال إجراء تشغيل برنامج نصي لـ shell في Automator. توثق Apple كلاً من إنشاء إجراءات Finder السريعة وإضافة برامج shell النصية إلى مهام سير عمل Automator. إنشاء سير عمل إجراء سريع · استخدام إجراء برنامج نصي لـ shell في سير عمل Automator
إنشاء الإجراء السريع في Finder
- افتح Automator، واختر ملف > جديد، ثم حدد إجراء سريع، وانقر فوق اختيار.
- في الجزء العلوي من سير العمل، اضبط يتلقى سير العمل الحالي على ملفات أو مجلدات واضبط التطبيق على Finder.
- ابحث عن تشغيل برنامج نصي لـ shell في مكتبة الإجراءات واسحبه إلى سير العمل.
- اضبط 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 القائمة على الأسطر مع الحفاظ على الملف المصدر للمراجعة.
المصادر
- إنشاء سير عمل إجراء سريع في Automator على Mac — دعم Apple
- استخدام إجراء برنامج نصي لـ shell في سير عمل Automator على Mac — دعم Apple
- awk(1) — صفحات دليل macOS 13.6.5 — صفحات دليل FreeBSD