শিরোনামটি মার্জ না করে একাধিক সিএসভি ফাইলগুলি মার্জ করা হচ্ছে


21

আমাকে একাধিক। CSV ফাইলগুলি ( catকমান্ডটি ব্যবহার করে ) মার্জ করতে হবে তবে প্রতিটি ফাইলের জন্য শিরোনামটি অনুলিপি না করেই করতে হবে।

এই কাজটি সম্পাদনের সর্বোত্তম উপায় কোনটি?

উত্তর:


32

তোমার থেকেও বেশি দরকার হবে catহিসাবে বর্ণনা কমান্ড এখানে :

বলুন আপনি 3 যে CSV ফাইল আছে: file1.csv, file2.csv, এবং file3.csvএবং তাদের যোগ দিতে চান bigfile.csvএবং আপনার হেডার সবসময় (শুধুমাত্র) প্রথম লাইন, তারপর ব্যবহার

হয় (প্রথম ফাইল "file1.csv" থেকে শিরোনাম রাখুন):

cat file1.csv <(tail +2 file2.csv) <(tail +2 file3.csv) > bigfile.csv

বা ("ফাইল" দিয়ে শুরু হওয়া সমস্ত ফাইল থেকে শিরোনাম সরান):

awk 'FNR > 1' file*.csv > bigfile.csv

4
আমি একটি জেনেরিক লিনাক্স উত্তর খুঁজছি এটি খুঁজে পেয়েছি, তবে আমার ক্ষেত্রে এটি ঠিক কাজ করে না। এটি চুপচাপ ফাইল 1 সিএসভি উপেক্ষা করবে। আমার সেই ফাইলটি বিড়াল করা দরকার ছিল। cat <(cat file1.csv) <(tail +2 file2.csv) <(tail +2 file3.csv) > bigfile.csv
লেওল

আমি লেজ +2 পেয়ে যাচ্ছি: যখন আমি বিড়াল <ফাইল1.csv <(লেজু +2 ফাইল2.csv) <(লেজু +2 ফাইল3.csv)> বিগ ফাইল সিএসভি পদ্ধতি

@ user64636 সেখানে লেজ এবং +2 মধ্যে একটি স্থান অক্ষর হওয়া উচিত
nohillside

আসলে আমাকে ব্যবহার করতে হয়েছিল tail -n+2, tail +2কাজ করবে না
ম্যাথিউ নাপোলি

12

আমি শীর্ষস্থানীয় উত্তরের সাথে একমত তবে আমি এটি নিম্নলিখিত দৃশ্যের সাথে বাড়ানোর পরামর্শ দিই (যেমন আমি মন্তব্য করতে পারি না):

আপনি যদি আউটপুট ফাইলটিতে শিরোনাম (একবার) থাকতে চান তবে সঠিক স্ক্রিপ্টটি হ'ল:

awk '(NR == 1) || (FNR > 1)' file*.csv > bigfile.csv

এফএনআর একটি একক ফাইলে প্রক্রিয়াজাত রেকর্ডের সংখ্যা উপস্থাপন করে। এবং এনআর এটি বিশ্বব্যাপী প্রতিনিধিত্ব করে, তাই প্রথম লাইনটি গৃহীত হবে এবং বাকিগুলি আগের মতো উপেক্ষা করা হবে।


7

আপনি { ; }প্রক্রিয়া বিকল্প ( <()) পরিবর্তে একটি গ্রুপ কমান্ড ( ) ব্যবহার করতে পারেন :

{ head -n1 file1.csv; for f in file*.csv; do tail -n+2 "$f"; done; } > new.csv

এটি খালি লাইন ( \r\n) দিয়ে ফাইলগুলি শেষ না হওয়া পর্যন্ত এটি সিআরএলএফ লাইন শেষের সাথেও কাজ করে ।

পিসিক্স 1003.1-2001 দ্বারা কেবলমাত্র মাথা এবং লেজের সংখ্যাগুলির সংস্করণগুলি অচল করে দেওয়া হয়েছিল এবং এর ফলে কিছু পরিবেশে সতর্কতা দেখা যায়।


2

চ্যানিং স্ক্রিপ্টের জন্য বৃহত সিএসভিতে অভিন্ন কলামগুলির সাথে দুটি বৃহত সিএসভি সংযুক্ত করার প্রয়োজন (ডেটাটির অনন্য আইডি নেই)।

প্রথমে দ্বিতীয় সিএসভি থেকে শিরোনাম নিয়েছে

awk 'FNR > 1' file2.csv > file2_noheading.csv

এরপরে, নিম্নলিখিতটির মাধ্যমে সম্মিলিত

cat file1.csv file2_noheading.csv > newfile.csv

1

উপরের কমান্ড সিকোয়েন্সটি ব্যবহার করার ফলে একটি ফাইলের চেহারা দেখতে পাওয়া গেল:

header,of,csv1
contents,of,csv1
==> csv2.csv

contents,of,csv2

একটি যথাযথ সিএসভি তৈরি করতে, একটি শিরোনাম লাইন এবং সমস্ত প্রাসঙ্গিক মান সহ, আমি নিম্নলিখিত sedজ্বলনিকে কাজে লাগিয়েছি ...sed -ie "/^$/d;/^==>/d" bigfile.csv


0

আপনার কাছে যদি এক টন ফাইল থাকে তবে সহজে সমাধান:

awk 'FNR > 1' *.csv > merged.csv

বড় ফাইলটি সম্পাদনা করতে আবার ফিরে আসুন এবং শিরোনামটি আবার ফিরে।


২০১৩ সালে ইলসমিট যেভাবে প্রস্তুত ছিল, তার চেয়ে আপনার উত্তর কীভাবে আলাদা awk 'FNR > 1' file*.csv > bigfile.csv? এটা না!
ব্যবহারকারীর 3439894

উত্তর: এটি কীভাবে আলাদা? এটি আরও সংক্ষিপ্ত উত্তর এবং একটি যেটি আমি অনুলিপি করে আটকে দিয়েছি, কমপক্ষে:) আমার উপন্যাসটি পেয়ে যায়
রিক ডেভিস

এটি একটি ভাল উত্তর, কারণ আপনার সমস্ত ফাইল শুরু করার দরকার নেইfile
big_smile ২
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.