এর মত একটি ফাইল দেওয়া হয়েছে
First,Last,Age
Cory,Klein,27
John Jacob,Smith,30
বিষয়বস্তু স্থানান্তর করার জন্য একটি কমান্ড লাইন ইউটিলিটি রয়েছে যাতে আউটপুটটি এর মতো প্রদর্শিত হয়
First,Cory,John Jacob
Last,Klein,Smith
Age,27,30
এর মত একটি ফাইল দেওয়া হয়েছে
First,Last,Age
Cory,Klein,27
John Jacob,Smith,30
বিষয়বস্তু স্থানান্তর করার জন্য একটি কমান্ড লাইন ইউটিলিটি রয়েছে যাতে আউটপুটটি এর মতো প্রদর্শিত হয়
First,Cory,John Jacob
Last,Klein,Smith
Age,27,30
উত্তর:
সিএসভি পার্সিং কেবলমাত্র পসইক্স সরঞ্জামগুলির সাহায্যে সহজেই করা যায় না, যদি না আপনি কোনও সরলিকৃত সিএসভি বৈকল্পিক ব্যবহার না করে কোনও উদ্ধৃতি না দিয়ে থাকেন (যাতে কমাগুলি কোনও ক্ষেত্রে প্রদর্শিত না হয়)। তারপরেও এই কাজটি টাস্ক বা অন্য পাঠ্য প্রক্রিয়াজাতকরণ থেকে টু টু টুল দিয়ে করা সহজ মনে হয় না। আপনি পার্ল উইথ Text::CSV
পাইথন csv
, আর উইথ read.csv
রুবি, সিএসভি সহ রুবি , ... (এগুলি সব পার্ল ব্যতীত সংশ্লিষ্ট ভাষার স্ট্যান্ডার্ড লাইব্রেরির অংশ।)
উদাহরণস্বরূপ, পাইথনে:
import csv, sys
rows = list(csv.reader(sys.stdin))
writer = csv.writer(sys.stdout)
for col in xrange(0, len(rows[0])):
writer.writerow([row[col] for row in rows])
Https://stackoverflow.com/a/2776078 থেকে :
$ apt-get install csvtool
এবং তারপরে রূপান্তর করুন
$ csvtool transpose input.csv > ouput.csv
বা পাইপলাইনে
$ ... | csvtool transpose - | ...
... | csvtranspose | ...
এটিকে পরাস্ত করবে সিনট্যাক্স-ভিত্তিতে।
একটি দ্রুত এবং নোংরা বাশ সমাধান:
c=1
file=file.txt
num_lines=$(wc -l < "$file")
for ((i=0; i<num_lines; i++)) {
cut -d, -f$c "$file" | paste -sd ','
((c++))
}
for ((i=1; i<=$num_cols; ++i)); do paste -s -d, <(cut -f$i -d, file.txt); done
this "is" example
সেলটি এনকোড করা হয়েছে "this ""is"" example"
যদি এই সমাধানটি এই ধরনের মামলাগুলি সঠিকভাবে পরিচালনা করে তবে আমি নিশ্চিত নই
প্রস্তাবিত সীমাবদ্ধতা (কোন উদ্ধৃতি, কোনও এমবেডেড কমা) দেওয়া না থাকায় এটি সহজ সরল (যেমন এটি পার্ল হিসাবে এক হাজার লাইনের উপরে বিবেচনা না করে CSV.pm
, ২৩০০ লাইন ইন csv.rb
- পাইথনটিতে কেবল 450 লাইন থাকে csv.py
)।
অ্যাডকের জন্য এখানে একটি উদাহরণ দেওয়া হয়েছে:
#!/usr/bin/awk -f
BEGIN { width=0; }
{
max = split($0, list, ",");
# printf "%d:%s\n", NR, $0;
if (width < max)
width = max;
for (n = 1; n <= max; ++n) {
sub("^[ ]*","",list[n]);
sub("[ ]*$","",list[n]);
# printf "\t%d:%s\n", n, list[n];
if ( columns[n] != "" ) {
columns[n] = columns[n] ", ";
}
columns[n] = columns[n] list[n];
}
}
END {
# printf "%d columns\n", width;
for (n = 1; n <= width; ++n) {
printf "%s\n", columns[n];
}
}
যাইহোক, প্রদত্ত উদাহরণটিতে অতিরিক্ত স্থান ছিল যা ওপি ধরে নিয়েছে তা সরানো হবে; অন্যান্য উদাহরণগুলি এই বিশদটি সম্বোধন করে না।
python
, খ) এরruby
চেয়ে কম পোর্টেবল নয়python
, এবং গ) এটি কীভাবে ইনপুট / আউটপুটটি পাস করবেন তাও দেখায় নথি পত্র. ব্রাভো @ লুইকোর, এবং ইউনিক্স এবং লিনাক্সে আপনাকে স্বাগতম। চারপাশে লাঠি না দয়া করে।