আমি কীভাবে ফাঁকা স্থানগুলিতে নয় ট্যাবগুলিতে সীমাবদ্ধ করতে কলামটি ব্যবহার করতে পারি?


59

আমি columnকিছু পাঠ্য বিন্যাস করতে ইউনিক্স কমান্ডটি ব্যবহার করতে চাই । আমি ট্যাব দ্বারা সীমিত ক্ষেত্র আছে, কিন্তু প্রতিটি ক্ষেত্রের মধ্যে ফাঁকা স্থান আছে। columnসাদা স্পেসে সীমানা (ট্যাব এবং স্পেস)। আমি কীভাবে কলামটি কেবল সীমানা হিসাবে ট্যাব ব্যবহার করতে পারি?

আমি ব্যবহার করে ট্যাবটিকে সীমানা হিসাবে নির্দিষ্ট করার চেষ্টা করছিলাম:

cat myfile | column -t -s"\t"

উত্তর:


82
column -t -s '\t'

কলামগুলি \এবং tঅক্ষরগুলি পৃথক করে ।

column -s \tcolumn -s tব্যাকস্ল্যাশ যেমন শেল দ্বারা একটি উদ্ধৃতি অপারেটর হিসাবে ব্যাখ্যা করা হয় ঠিক একই ।

এখানে আপনি কলামে একটি আসল TAB অক্ষরটি পাস করতে চান। Ksh93, zsh, bash, mksh, busybox sh বা FreeBSD sh সহ:

column -ts $'\t'

অথবা Ctrl-V Tabশেল প্রম্পটে টাইপ করে একটি আসল ট্যাব অক্ষর প্রবেশ করান (টেক্স অক্ষরটি স্থানের মতো শেল সিনট্যাক্সের একটি টোকেন বিভাজক হিসাবে কোটগুলির মধ্যে বা একটি ব্যাকস্ল্যাশের পূর্বে), বা ব্যবহার করুন "$(printf '\t')"(স্প্লিট + গ্লোব অক্ষম করার জন্য এই ডাবল উদ্ধৃতিগুলির প্রয়োজন ট্যাব অক্ষর হিসাবে অপারেটরটি এর ডিফল্ট মানতেও ঘটে $IFS)।


3
আমি কি ছিল column -t -s $'\t'ব্যাশ যেমন মনে করলো '\t'মানে উভয় \ এবং t, কিন্তু $'\t'একটি আক্ষরিক ট্যাব মানে। বাশ দুর্গন্ধযুক্ত
থারস্ম্মোনার

আপনার যদি পসিক্স কমপ্লায়েন্সির প্রয়োজন হয় (প্রভু আমাকে সাহায্য করুন), দয়া করে আমার উত্তরটি দেখুন, যা দুর্দান্ত এই উত্তরের উপর ভিত্তি করে!
নিক বুল

এই সমাধানটি আমার পক্ষে কাজ করেছে - $'\t'ডাবগুলি সীমিত করে তোলে। তবে আমি দৃ sure়ভাবে নিশ্চিত যে আমি awk -F "\t"অ্যাডাব্ল্যাডের জন্য ডিলিমিটার হিসাবে একটি ট্যাব ব্যবহার করতে চাই । কেন এটি কাজ করে এবং কলামের জন্য এখানে নয়?
মাইক

3

আমি নিম্নলিখিতটি ব্যবহার করেছি (কেবলমাত্র যদি আপনার পাঠ্য না থাকে তবে কাজ করে |):

cat myfile | tr '\t' '|' | column -t -s '|'

এটি কেবল পাইপগুলির সাথে ট্যাবগুলিকে প্রতিস্থাপন করে, তারপরে পাইপগুলির সাথে ডিলিমিটার হিসাবে কলাম ব্যবহার করে।

(আমি এটি করেছি কারণ আমি স্টাফেনের উত্তরে এমন কিছু দেখতে পাইনি যা মাছের শেলের মধ্যে বাক্সের বাইরে কাজ করেছিল Otherwise


3

পসিক্সের জন্য, $'...'এএনএসআই-সি পলায়ন হিসাবে পরিচিত, সংজ্ঞায়িত হয়নি।

পরিবর্তে, আপনি ব্যবহার করতে পারেন $(printf '\t'):

column -t -s "$(printf '\t')"

$(printf '\011')ব্যবহার করা যেতে পারে, যেমন 011(দশমিক 9 এর অষ্টাল উপস্থাপনা) একটি অনুভূমিক ট্যাব অক্ষরের জন্য এএনএসআই কোড:

column -t -s "$(printf '\011')"

তবে কেন এটি শেল সংস্করণ জুড়ে সামঞ্জস্যপূর্ণ হতে পারে না তা সম্পর্কে স্টাফেন চেজেলাসের নীচে মন্তব্য দেখুন।


2
নোট করুন যে পসিক্স টিএবির এনকোডিং কী তা নির্দিষ্ট করে না। এখনও পসিক্স সিস্টেম রয়েছে যার সি লোকেল এনকোডিংটি ইবিসিডিআইসি ভিত্তিক যেখানে এসএসিআইআই-তে 9 টি নয়, 5 টিবি রয়েছে। যেখানেই সম্ভব, এই জাতীয় সমস্যাটি এড়াতে নামের "$(printf '\t')"উত্তরে অক্ষরগুলি উল্লেখ করা ভাল যা আমার উত্তরে দেখানো হয়েছে। নোট যে $'...'পসিক্স স্পেসিফিকেশন পরবর্তী প্রধান সংস্করণ অন্তর্ভুক্ত করার জন্য পরিকল্পনা করা হয়েছে।
স্টাফেন চেজেলাস

@ স্টাফেনচাজেলাস $(printf '\t')পসিক্স? ধন্যবাদ!
নিক বুল


@ স্টাফেনচাজেলাস আপনাকে অনেক ধন্যবাদ, আমি আপনার উত্তরটি আপনার খুব সহায়ক টিপকে অন্তর্ভুক্ত করার জন্য আপডেট করেছি :)
নিক বুল

2

-tকলাম যদি আপনি চান সংখ্যা নির্বাচনের জন্য নয়। এই ফাঁকা ছেড়ে যাওয়া কোনও পরিবর্তন করে না। এছাড়াও, আপনি সাদা স্থান চান -sতাই এটি চেষ্টা করে দেখুন:

cat myfile | column -s \t


ধন্যবাদ। এটি আমি যা খুঁজছি তার কাছাকাছি। তবে, এখন সমস্ত লাইন এক লাইনে একত্রিত হয়েছে। আমি কীভাবে প্রতিটি লাইনের নিজস্ব লাইনে রাখতে পারি?
টার্টল

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