শিরোনামের নাম অনুসারে কলামগুলি মুদ্রণ করুন


12

আমার মতো একটি টেক্সট ফাইল আছে

foo bar baz
1   a   alpha
2   b   beta
3   c   gamma

আমি নির্দিষ্ট কলাম সহ, 1 ও 3 মতো প্রিন্ট করতে awk ব্যবহার করতে পারেন {print $1, $3}, কিন্তু আমি পরিবর্তে কলামের হেডার উল্লেখ মত কিছু প্রিন্ট করতে কলাম নির্দিষ্ট করতে চান {print $foo, $baz}। এটি দরকারী তাই কোন ফাইলটি খোলার দরকার নেই এবং কলামগুলি ম্যানুয়ালি গণনা করতে হবে কোন কলামটি কোনটি তা দেখার জন্য এবং কলাম নম্বর বা আদেশ পরিবর্তন হলে আমাকে স্ক্রিপ্টটি আপডেট করতে হবে না। আমি কি এজেড (বা অন্য কোনও শেল সরঞ্জাম) দিয়ে এটি করতে পারি?

উত্তর:


17
awk '
NR==1 {
    for (i=1; i<=NF; i++) {
        f[$i] = i
    }
}
{ print $(f["foo"]), $(f["baz"]) }
' file
foo baz
1 alpha
2 beta
3 gamma

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


এটি দুর্দান্ত ধন্যবাদ এবং আমার উদ্দেশ্যে কাজ করে। এটি কীভাবে কোনও অগ্রভাগের জন্য কাজ করে তা আপনি স্পষ্ট করে বলতে সক্ষম হন? এফ [$ i] সিনট্যাক্সটি কী করছে এবং কোন কলামটি স্ট্রিংগুলির সাথে মিলে যায় তা কীভাবে কাজ করবে?
অ্যালেক্সলিপ

আপনাকে স্বাগতম. এটি একেবারে বেসিক অ্যাঙ্ক সিনট্যাক্স, অ্যাড ম্যান পৃষ্ঠাতে কেবল ক্ষেত্র এবং অ্যারেগুলি অনুসন্ধান করুন (বা এটি গুগল করুন)। যোগ print iএবং print $iএবং print চ [$ i এর] `লুপ বিবৃতি ইত্যাদি ঘটছে যে সাহায্য করে তাহলে কি ট্রেস।
এড মর্টন

1

আপনার জন্য অনুরোধ awk, কিন্তু আপনি এই জন্য একটি আরো বিশেষ টুল ব্যবহার করতে পারে: csvtool

csvtool -t ' ' -u ' ' namedcol foo,baz file

অথবা

csvtool -t ' ' -u ' ' col 1,3 file

1

ধরে নিচ্ছেন যে ফাইলটি একটি টিএসভি ("ট্যাব দ্বারা বিভাজিত মান") ফাইল, এটি ব্যবহার করে csvkit:

$ csvcut -t -c foo,baz file.tsv
foo,baz
1,alpha
2,beta
3,gamma

আউটপুটটি সঠিকভাবে সিএসভি ফর্ম্যাট করা হবে তবে সহজেই টিএসভিতে পরিবর্তিত হতে পারে:

$ csvcut -t -c foo,baz file.tsv | csvformat -T
foo     baz
1       alpha
2       beta
3       gamma

-cবিকল্পে csvcutএছাড়াও সংখ্যা এবং রেঞ্জ গ্রহণ করতে পারেন, এবং এছাড়াও ব্যবহার করা যেতে পারে নতুন করে সাজানো ইনপুট ডেটা কলাম (ক বৈশিষ্ট্য আমি প্রায়ই মান মিস cutউপযোগ)।

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