কোনও সিএসভি-ফাইলে একটি কলাম কমানোর জন্য একটি কমান্ড লাইন বানান রয়েছে?


32

নিম্নলিখিত বিষয়বস্তুর একটি ফাইল থাকা:

1111,2222,3333,4444
aaaa,bbbb,cccc,dddd

আমি মূল ফাইলের সমান কোনও ফাইল পেতে চাইছি তবে এন = 2 এর জন্য এন-তম কলামের মতো অভাব নেই (অথবা এটি 3 হতে পারে)

1111,2222,4444
aaaa,bbbb,dddd

বা, এন = 0 এর জন্য (বা এটি 1 হতে পারে)

2222,3333,4444
bbbb,cccc,dddd

একটি আসল ফাইল দশ হাজার কলাম সহ দীর্ঘ গিগাবাইট হতে পারে।

এই জাতীয় ক্ষেত্রে সর্বদা হিসাবে, আমার সন্দেহ হয় কমান্ড লাইন যাদুকররা একটি মার্জিত সমাধান দিতে পারে ... :-)

আমার আসল বাস্তব ক্ষেত্রে আমার 2 টি প্রথম কলাম ড্রপ করা দরকার যা একটি ক্রমের মধ্যে দু'বার প্রথম কলাম ফেলে রেখে করা যেতে পারে তবে আমি মনে করি কিছুটা সাধারণ করা আরও আকর্ষণীয় হবে।


ক্ষেত্রগুলি না থাকার গ্যারান্টিযুক্ত ,? (অর্থাত্ ,কেবল ফিল্ড বিভাজক হিসাবে ব্যবহৃত হয়))
সিভিএন

@ মাইকেল কেরল্লিং, আরও নমনীয় সমাধান পেয়ে ভাল লাগবে তবে আমার ক্ষেত্রে - হ্যাঁ: বিভাজক ,এবং এটি কোনও ক্ষেত্রের মধ্যে কখনও হয় না।
ইভান

সেক্ষেত্রে স্কটের উত্তরটি কেবল জিনিসই হওয়া উচিত।
সিভিএন

উত্তর:


47

আমি বিশ্বাস করি এটি জিএনইউ কোর্টিলগুলি থেকে কাটা নির্দিষ্ট specific

$ cut --complement -f 3 -d, inputfile
1111,2222,4444
aaaa,bbbb,dddd

সাধারণত আপনি -f এর মাধ্যমে আপনি যে ক্ষেত্রগুলি চান তা নির্দিষ্ট করে থাকেন, তবে - কমপ্লিট যোগ করে আপনি প্রাকৃতিকভাবে অর্থটি উল্টো করেন। 'ম্যান কাট' থেকে:

--complement
    complement the set of selected bytes, characters or fields

একটি সতর্কতা: যদি কোনও কলামে কমা থাকে, তবে এটি কেটে ফেলা হবে, কারণ কাটা কোনও স্প্রেডশিটের মতো সিএসভি পার্সার নয়। সিএসভিতে পালানো কমাগুলি কীভাবে পরিচালনা করতে হবে সে সম্পর্কে অনেক পার্সারের বিভিন্ন ধারণা রয়েছে। কমান্ড লাইনে সাধারণ সিএসভি ক্ষেত্রে, কাটা এখনও যাওয়ার উপায়।


4
এটি যতক্ষণ না এটি একটি সাধারণ সিএসভি ফাইল হিসাবে কাজ করে। যদি কোনও কলামে কমাযুক্ত স্ট্রিং থাকে তবে এটি ফেলে দেওয়া cutহবে কারণ এটি কোনও CSV পার্সার নয়। যদি কোনও সিএসভি ক্ষেত্রের মানটির ক্ষেত্রে একটি ক্ষেত্র বিভাজক থাকে তবে তা উদ্ধৃতিতে আবৃত। BTW, বিষয় cut, -fক্ষেত্র রেঞ্জ লাগে। cut -f, -d3-প্রথম দুটি অপসারণ করে তৃতীয় ক্ষেত্রটি আউটপুট আসবে।
অ্যালেক্সিয়াস

2
আপনার অর্থcut -d, -f3-
অনর্থক

@ অ্যালেক্সিয়াস এটি একটি ভাল বিষয়। আমি কখনই "আসল" সিএসভি, সত্যিই সাধারণ উপসেটটি নিয়ে সত্যই ডিল করি না। আমি প্রতিফলিত করতে আমার উত্তর সম্পাদনা করব।
স্কট ম্যাকক্লুং

@ ব্যবহারহীন: জঘন্য, হ্যাঁ। এটিকেই আমি আবার আমার 'কাট ডিসলেক্সিয়া' বলে আছি। দীর্ঘশ্বাস । স্কট: সিএসভি ফাইলগুলি কৌশলযুক্ত জন্তু। অনেক বেশি বিভিন্ন সাব-ফর্ম্যাট, যার মধ্যে কিছু সি এসভি নয়, তবে প্রচলিতভাবে যাকে যাইহোক বলা হয়।
অ্যালেক্সিয়ো

এটি আমার টার্মিনালে নতুন সিএসভি প্রিন্ট করে - ইনপুটটি ওভাররাইট করার জন্য আমি এটি কীভাবে পাব (বা সম্ভবত কোনও নতুন ফাইলে লিখতে হবে, মনে হয় ওপি যেমন খুঁজছিল)?
ম্যাক্স ঘেনিস

12

যদি ডেটাটি সহজেই কমা-বিভাজিত কলামগুলি দিয়ে তৈরি করা হয়:

cut -d , -f 1-2,4-

আপনি বিশ্রীও ব্যবহার করতে পারেন তবে এটি কিছুটা বিশ্রী কারণ কারণ ক্ষেত্র সাফ করার সময় পৃথককে অপসারণ করতে কিছু কাজ লাগে। আপনার যদি খালি ক্ষেত না থাকে তবে এটি খুব খারাপ নয়:

awk -F , 'BEGIN {OFS=FS}  {$3=""; sub(",,", ","); print}'

আপনার যদি সত্যিকারের সিএসভি থাকে, যেখানে সঠিকভাবে উদ্ধৃতি দেওয়া থাকলে কমাগুলি ক্ষেত্রগুলির অভ্যন্তরে উপস্থিত হতে পারে, আপনার একটি সত্যিকারের সিএসভি লাইব্রেরি দরকার

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