যদি কোনো সম্মিলিত CSV-তে ব্যাচগুলোর মাঝে কলামের শিরোনাম বারবার পুনরাবৃত্ত হয়, তবে আপনি একটি Finder Quick Action তৈরি করতে পারেন যা প্রথম লাইনটি রাখবে এবং সেটির সাথে হুবহু মিলে যাওয়া পরবর্তী লাইনগুলো মুছে ফেলবে। নিচের অ্যাকশনটি মূল ফাইলটিকে অক্ষত রেখে প্রতিটি নির্বাচিত ফাইলের পাশে একটি পৃথক .cleaned.csv ফাইল তৈরি করে। এটি সাধারণ CSV এক্সপোর্টের ক্ষেত্রে কাজ করে যেখানে প্রতিটি রেকর্ড একটি লাইনে থাকে; এটি সব ধরনের বৈধ CSV ফরম্যাট পার্স করে না।
Quick Action-টি যা করবে
এই ওয়ার্কফ্লোটি পৃথক CSV ফিল্ড নয়, বরং সম্পূর্ণ লাইনগুলোর তুলনা করে। এটি প্রথম লাইনটিকে হেডার হিসেবে সংরক্ষণ করে, সেটিকে আউটপুটে কপি করে, এবং পরবর্তীতে সেই হেডারের সাথে হুবহু মিলে যাওয়া যেকোনো লাইন এড়িয়ে যায়। অন্যান্য সারিগুলো তাদের মূল ক্রমে বজায় থাকে, যার মধ্যে পুনরাবৃত্ত ডেটা সারিগুলোও অন্তর্ভুক্ত। যখন এক্সপোর্ট করা ব্যাচগুলো রেকর্ডের মাঝে একই শিরোনাম ঢুকিয়ে দেয়, তখন এটি একটি কার্যকর সমাধান।
এই পদ্ধতিটি Automator-এর Run Shell Script অ্যাকশনের মাধ্যমে macOS-এর বিল্ট-ইন awk ব্যবহার করে। Finder Quick Action তৈরি এবং Automator ওয়ার্কফ্লোতে শেল স্ক্রিপ্ট যোগ করার উভয় প্রক্রিয়াই Apple-এর নথিপত্রে রয়েছে। Create a Quick Action workflow · Use a shell script action in an Automator workflow
Finder Quick Action তৈরি করুন
- Automator খুলুন, File > New বেছে নিন, Quick Action নির্বাচন করুন, তারপর Choose-এ ক্লিক করুন।
- ওয়ার্কফ্লোর শীর্ষে, Workflow receives current অপশনটি files or folders-এ সেট করুন এবং অ্যাপ্লিকেশনটি Finder নির্ধারণ করুন।
- Actions লাইব্রেরি থেকে Run Shell Script খুঁজুন এবং এটিকে ওয়ার্কফ্লোতে টেনে আনুন।
- Shell অপশনটি
/bin/zshএবং Pass input অপশনটি as arguments-এ সেট করুন। নিচের স্ক্রিপ্টটি অ্যাকশনের মধ্যে পেস্ট করুন।
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
ওয়ার্কফ্লোটি Remove Repeated CSV Headers-এর মতো একটি নাম দিয়ে সংরক্ষণ করুন। সোর্স ফাইলের পাশে একটি অস্থায়ী ফাইল তৈরি হয়, তারপর প্রক্রিয়াকরণের পর সেটিকে আউটপুট নামে পরিবর্তন করা হয়। যদি সেই আউটপুট ফাইলটি আগে থেকেই বিদ্যমান থাকে, তবে স্ক্রিপ্টটি সেটিকে প্রতিস্থাপন না করে বন্ধ হয়ে যায়। মূল ইনপুট ফাইলে কখনোই কোনো কিছু লেখার চেষ্টা করা হয় না।
এটি চালান এবং ফলাফল পরীক্ষা করুন
Finder-এ, এক বা একাধিক CSV ফাইল নির্বাচন করুন, কনটেক্সচুয়াল Quick Actions মেনুটি খুলুন এবং Remove Repeated CSV Headers বেছে নিন। প্রতিটি মূল ফাইলের পাশে .cleaned.csv দিয়ে শেষ হওয়া একটি ফাইল খুঁজুন। ফলাফলটি একটি টেক্সট এডিটর বা স্প্রেডশীটে খুলুন এবং নিশ্চিত করুন যে এটিতে এখনও একটি শিরোনাম রয়েছে এবং প্রতিটি পুনরাবৃত্ত শিরোনামের আগের ও পরের সারিগুলো বহাল রয়েছে। ওয়ার্কফ্লোটি কোনো কাস্টম সমাপ্তি বার্তা দেখায় না; কোনো ফাইল তৈরি না হওয়ার অর্থ হতে পারে আউটপুটটি আগেই বিদ্যমান ছিল অথবা প্রক্রিয়াকরণে কোনো ত্রুটি ঘটেছে।
তুলনাটি একদম নিখুঁত বা হুবহু হয়: বড় বা ছোট হাতের অক্ষর (capitalization), ফাঁকা স্থান (spacing), বিরামচিহ্ন (punctuation) বা উদ্ধৃতি চিহ্নের (quoting) ভিন্নতা থাকলে সেটিকে আলাদা লাইন হিসেবে গণ্য করা হবে এবং সেটি ফাইলে থেকে যাবে। এই সীমাবদ্ধতাটি এখানে ইচ্ছাকৃতভাবেই রাখা হয়েছে; ফাইলের টেক্সট ভিন্ন হলে কোন সারিগুলো শিরোনাম হিসেবে গণ্য হবে তা অনুমান করার ঝুঁকি এটি এড়িয়ে চলে।
এই লাইন-ভিত্তিক পদ্ধতিটি কখন অনুপযুক্ত তা জানুন
CSV ফাইলে এমবেডেড নিউলাইন অক্ষরসহ উদ্ধৃত ফিল্ড (quoted fields) থাকতে পারে। সেক্ষেত্রে, একটি লজিক্যাল CSV রেকর্ড একাধিক ফিজিক্যাল লাইনে বিস্তৃত হতে পারে, যেখানে awk ইনপুটকে সাধারণ লাইন হিসেবে প্রক্রিয়া করে। ফলে এই স্ক্রিপ্টটি একটি ফিল্ডের ভেতরের লাইনকে ভুলবশত রেকর্ড মনে করতে পারে বা ফাইলটিকে বিকৃত করে দিতে পারে। Apple-এর macOS awk ম্যানুয়াল এর লাইন-ভিত্তিক প্রক্রিয়াকরণ পদ্ধতির বর্ণনা দেয়; মাল্টি-লাইন CSV-এর জন্য এর পরিবর্তে এমন একটি CSV-সচেতন টুল ব্যবহার করুন যা ফাইলের ফরম্যাট সমর্থন করে। macOS awk manual
এই Quick Action-টি অপ্রয়োজনীয় স্পেস স্বাভাবিক (normalize) করে না, কাছাকাছি মিল থাকা লাইন সরিয়ে দেয় না, কলামের নাম যাচাই করে না বা ফাইলগুলোকে একত্রিত করে না। এটি একটি নির্দিষ্ট ধরনের পরিচ্ছন্নতার জন্য উপযোগী: পর্যালোচনার জন্য মূল ফাইলটি অক্ষত রেখে লাইন-ভিত্তিক CSV এক্সপোর্ট থেকে প্রথম ফিজিক্যাল লাইনের হুবহু পুনরাবৃত্তিগুলো দূর করা।
উৎসসমূহ
- Create a Quick Action workflow in Automator on Mac — Apple Support
- Use a shell script action in an Automator workflow on Mac — Apple Support
- awk(1) — macOS 13.6.5 Manual Pages — FreeBSD Manual Pages