একটি সুন্দর কলাম লেআউটের জন্য ভিমে পুনরায় ফর্ম্যাট করুন


126

আমার এই সিএসভি ফাইলে এই ডেটাসেট রয়েছে

1.33570301776, 3.61194e-06, 7.24503e-06, -9.91572e-06, 1.25098e-05, 0.0102828, 0.010352, 0.0102677, 0.0103789, 0.00161604, 0.00167978, 0.00159998, 0.00182596, 0.0019804, 0.0133687, 0.010329, 0.00163437, 0.00191202, 0.0134425 
1.34538754675, 3.3689e-06, 9.86066e-06, -9.12075e-06, 1.18058e-05, 0.00334344, 0.00342207, 0.00332897, 0.00345504, 0.00165532, 0.00170412, 0.00164234, 0.00441903, 0.00459294, 0.00449357, 0.00339737, 0.00166596, 0.00451926, 0.00455153
1.34808186291, -1.99011e-06, 6.53026e-06, -1.18909e-05, 9.52337e-06, 0.00158065, 0.00166529, 0.0015657, 0.0017022, 0.000740644, 0.00078635, 0.000730052, 0.00219736, 0.00238191, 0.00212762, 0.00163783, 0.000750669, 0.00230171, 0.00217917

আপনি দেখতে পাচ্ছেন যে, সংখ্যাগুলি আলাদাভাবে ফর্ম্যাট করা হয়েছে এবং বিভ্রান্তিকর হয়েছে। কলামগুলি যথাযথভাবে সঠিকভাবে সারিবদ্ধ করার কোনও উপায় আছে কি না, ফলস্বরূপ

1.33570301776,  3.61194e-06, 7.24503e-06, -9.91572e-06, 1.25098e-05, 0.0102828,  0.010352,   0.0102677,  0.0103789, 0.00161604, 0.00167978, 0.00159998, 0.00182596, 0.0019804,  0.0133687,  0.010329,   0.00163437, 0.00191202, 0.0134425 
1.34538754675,  3.3689e-06,  9.86066e-06, -9.12075e-06, 1.18058e-05, 0.00334344, 0.00342207, 0.00332897, 0.00345504,0.00165532, 0.00170412, 0.00164234, 0.00441903, 0.00459294, 0.00449357, 0.00339737, 0.00166596, 0.00451926, 0.00455153
1.34808186291, -1.99011e-06, 6.53026e-06, -1.18909e-05, 9.52337e-06, 0.00158065, 0.00166529, 0.0015657,  0.0017022, 0.000740644,0.00078635, 0.000730052,0.00219736, 0.00238191, 0.00212762, 0.00163783, 0.000750669,0.00230171, 0.00217917

এটি ctrl-v দিয়ে বিভাগগুলি অনুলিপি করে আটকানো দুর্দান্ত হবে। কোন ইঙ্গিত?

উত্তর:


263

আপনি যদি একরকম ইউনিক্স (লিনাক্স ইত্যাদি) এ থাকেন তবে কলাম (1) কমান্ডের মাধ্যমে আপনি এটি প্রতারণা এবং ফিল্টার করতে পারেন।

:%!column -t

উপরেরটি স্ট্রিং লিটারালগুলির মধ্যে ডিলিমিটারগুলিতে বিশ্লেষণ করবে যা ভুল,

%!sed 's/","/\&/' | column -t -s '&'

1
কুল কমান্ড, আমি এটি সম্পর্কে অবগত ছিলাম না (অতীতে এই ধরণের অপারেশন করার জন্য লিখিত কাস্টম পার্ল স্ক্রিপ্ট থাকা)।
hlovdal

24
কারণ আমার ফাইলগুলিতে আমার ব্যবহার করার মতো জায়গা ছিল না :%!column -t -s ','। এটি কমাগুলি সরিয়ে দেয়, সুতরাং তারা আর সিএসভি ফাইল প্রযুক্তিগত নয়। তবে সেগুলি সুন্দর করে সাজিয়েছে, যা আমার প্রয়োজন।
এডুয়ার্ডো

27
দুর্দান্ত টিপ! কেবল যোগ করা, এটি ভিজ্যুয়াল নির্বাচনের জন্যও কাজ করে:'<,'>!column -t
ফ্রেইটাস

2
কলামে কমা দিয়ে উদ্ধৃত কলামগুলির সাথে কাজ করার সমাধান সম্পর্কে কেউ জানেন? উদাহরণস্বরূপ "2151 মেইন এসটি হিউস্টন, টিএক্স"
মেট্রিক্স

3
@ মেট্রিক্স, এখানে একটি অত্যন্ত আনাড়ি কাজ রয়েছে: 1) ডিলিমিটরের অভ্যন্তরীণ স্থানগুলিকে একটি আলাদা চরিত্রে রূপান্তর করুন, ২) তারপরে columnপোস্টে বর্ণিত হিসাবে চালান , 3) তারপরে আপনার সীমানি স্থানগুলিতে ফিরিয়ে দিন। # 1 টি পদক্ষেপ জন্য ভিসুয়াল মোডে একটি উদাহরণ কমান্ড:'<,'>s/"\(\w\+\) \(\w\+\)"/"\1_\2"/g
লুসিয়ানো

54

কখনও কখনও আমরা মাত্র দুটি কলাম সারিবদ্ধ করতে চাই। সেক্ষেত্রে আমাদের কোনও প্লাগইন দরকার নেই এবং খাঁটি ভিম কার্যকারিতা এটির মতো ব্যবহার করতে পারি:

  1. একটি বিভাজক চয়ন করুন। ওপির পোস্টে এটি একটি কমা, আমার উদাহরণে এটি =
  2. এর আগে / পরে স্পেস যুক্ত করুন। আমি এর জন্য s/=/= ...spaces... /ভিজ্যুয়াল সিলেকশন ব্যবহার করি ।
  3. দীর্ঘতম শব্দের সন্ধান করুন এবং এর পরে কার্সার রাখুন।
  4. সমস্ত অতিরিক্ত সাদা স্থান dwএবং উল্লম্ব গতিবিধি ব্যবহার করে সরান ।

নীচে প্রদর্শিত এই কৌশলটির উদাহরণ:

উদাহরণ

আমি নিজেকে অন্য প্লাগইন ইনস্টল করার জন্য পর্যাপ্ত জিনিসগুলি সারিবদ্ধ করার প্রয়োজন মনে করি না, তাই এটি সম্পাদন করার এটি আমার পছন্দসই উপায় ছিল - বিশেষত এটির জন্য খুব বেশি চিন্তাভাবনার প্রয়োজন হয় না।


4
কীভাবে আপনি এই চমৎকার gif তৈরি করলেন?
স্টেফানো বোরিনি

1
দুর্ভাগ্যক্রমে ব্লগ.বাহরানিয়াপ্পস / গিফক্যাম , দেখতে এটি কেবল উইন্ডোজ-এর একটি সরঞ্জাম।
rr-

আপনি যখন উপরের অংশটি সারিবদ্ধ করেছেন, আপনি কীভাবে পর্দার মাঝের দিকে কার্সারটি সরালেন এবং তারপরে নীচের অংশটি সারিবদ্ধ করবেন?
সাইচোই

5
পরে :s/=/ =/এটা অনেক ভালো ব্যবহার করা Ctrl + Vঠিক কলাম নির্বাচন করুন, তারপর এটি ব্যবহার সারিবদ্ধ <<এবং .পুনরাবৃত্তি করতে। : এটা এখানে পাওয়া stackoverflow.com/a/24704379/2152384
pozitron57

1
বা ডি জব করার জন্য কোনও ম্যাক্রো তৈরি করুন @ pozitron57
আর্থার জুলিয়ানো

24

যেমন সানি 256 পরামর্শ দিয়েছে, columnকমান্ডটি ইউনিক্স / লিনাক্স মেশিনে এটি করার একটি দুর্দান্ত উপায়, তবে আপনি যদি এটি খাঁটি ভিমে করতে চান (যাতে এটি উইন্ডোতেও ব্যবহার করা যায়), সহজতম উপায় হ'ল সারিবদ্ধ ইনস্টল করা প্লাগইন এবং তারপর করুন:

:%Align ,
:%s/\(\s\+\),\s/,\1/g

প্রথম লাইনটি কমাগুলিতে এন্ট্রিগুলি সারিবদ্ধ করে এবং দ্বিতীয়টি কমাটিকে সরায় যাতে এটি পূর্ববর্তী মান সহ ফ্লাশ হয়। আপনি AlignCtrlএকটি কাস্টম ম্যাপিং সংজ্ঞায়িত করতে ব্যবহার করতে সক্ষম হতে পারেন যা পুরো একবারে একসাথে করে, তবে কীভাবে এটি ব্যবহার করব তা আমি কখনই মনে করতে পারি না ...

সম্পাদন করা

আপনি যদি এন্ট্রিগুলির মধ্যে দুটি স্পেস মনে না করেন এবং আপনি একটি আদেশে এটি করতে চান তবে আপনি এটি করতেও পারেন:

:%Align ,\zs

একটি ল্যাটেক্স সারণিতে পুরোপুরি কাজ করে::'<,'>Align &
টমাস

এটি :%Align! lP0 \s( l= বামদিকে প্রান্তিককরণ, P0বিভাজকের পরে = 0 প্যাডিং) দিয়েও সম্পন্ন হতে পারে ।
nd

8

এটি ভিম ম্যাক্রো ব্যবহার করে দুর্দান্ত উত্তর: https://stackoverflow.com/a/8363786/59384 - মূলত, আপনি একটি ম্যাক্রো রেকর্ডিং শুরু করেন, প্রথম কলামটি ফর্ম্যাট করুন, রেকর্ডিং বন্ধ করুন তারপরে বাকি সমস্ত লাইনের জন্য ম্যাক্রোর পুনরাবৃত্তি করুন।

উত্তরটি অনুলিপি / আটকানো:

qa0f:w100i <Esc>19|dwjq4@a

100i এর পরে একক স্পেসটি নোট করুন এবং <Esc> এর অর্থ "প্রেস এস্কেপ" - আক্ষরিকরূপে "<Esc>" টাইপ করবেন না।

অনুবাদ:

qa         -- record macro in hotkey a
0          -- go to beginning of line
f:         -- go to first : symbol
w          -- go to next non-space character after the symbol
100i <Esc> -- insert 100 spaces
19|        -- go to 19th column (value 19 figured out manually)
dw         -- delete spaces until : symbol
j          -- go to next line
q          -- stop recording macro
4@a        -- run the macro 4 times (for the remaining 4 lines)



4

আপনি csv.vim প্লাগইন ব্যবহার করতে পারেন ।

:%ArrangeColumn

যাইহোক, এটি আপনি যা বলেছিলেন ঠিক তেমনভাবে করবে না: এটি ঠিক কক্ষগুলির বিষয়বস্তু সামঞ্জস্য করবে, যেখানে আপনার মানগুলি দশমিক বিন্দু বা প্রথম অঙ্ক অনুসারে একত্রিত হবে।

সিএসভি ফাইলগুলির সাথে কাজ করার জন্য প্লাগইনটিতে রয়েছে আরও অনেক দরকারী কমান্ড।


3

এছাড়াও যদি আপনার খুব দীর্ঘ কলাম থাকে তবে এটি ডিফল্ট মোড়কে অক্ষম করা সহজ

: Nowrap সেট করুন
:%! কলাম -টি

(ডিবিয়ানে নোট করুন আপনার কাছে কলাম-এন এর জন্য আরও একটি বিকল্প রয়েছে যা আপনি যদি একাধিক সংলগ্ন সীমানা বিভক্ত করতে চান)


Nowrap সঙ্গে আরও ভাল। আমি আপনার পরামর্শটি অন্তর্ভুক্ত করেছি, ধন্যবাদ 'কমান্ড সিএসভি সেটআপ করুন | %! কলাম-টি-এস ',' `।
পেরুজ

এছাড়াও, খালি কলামগুলির মার্জ করা অক্ষম করতে -n বিকল্পটি নোট করুন। stackoverflow.com/questions/1875305/command-line-csv-viewer
Peruz


1

খুব পুরানো প্রশ্ন, তবে আমি সম্প্রতি নিজেকে একটি দুর্দান্ত ভিআইএম প্লাগইন ব্যবহার করেছি যা টেবিল ফর্ম্যাটিংয়ে ফ্লাইতে বা সত্যের পরে (আপনার ব্যবহারের ক্ষেত্রে যেমন প্রয়োজন) সারণি সক্ষম করে:

https://github.com/dhruvasagar/vim-table-mode


1

এখানে একটি খাঁটি ভিম স্ক্রিপ্ট উত্তর, কোনও প্লাগইন নেই, কোনও ম্যাক্রো নেই:

উদাহরণস্বরূপ আমার সমস্যার সমাধানটি শুরু করা সবচেয়ে পরিষ্কার হতে পারে। আমি যে কোডের কোডটি প্রভাবিত করতে চাইছি তা নির্বাচন করেছি, তারপরে নিম্নলিখিত কমান্ডটি ব্যবহার করেছি (স্মরণ করুন যে ভিজ্যুয়াল মোড থেকে কমান্ড মোডে প্রবেশ করে স্বয়ংক্রিয়ভাবে "'<,'>" প্রেন্ডেন্ড হয়, সুতরাং এটি চাক্ষুষ পরিসীমাতে কাজ করে):

:'<,'>g``normal / "value<0d>D70|P`

ব্যতীত আমি আসলে "<0d>" টাইপ করি নি। আপনি কমান্ড লাইনে সিআরটিএল-ভি টিপুন এবং তারপরে যে কীটি টাইপ করতে চান তা চাপিয়ে অক্ষর অক্ষর লিখতে পারবেন। আমি "ctrl-v এন্টার" টাইপ করার পরে কমান্ড লাইনে "<0d>" রেন্ডার করা হয়। এখানে, এটি "/" অনুসন্ধান মোড থেকে প্রস্থান হিসাবে "সাধারণ" কমান্ড দ্বারা পার্স করা হয়েছে। কার্সারটি তারপরে বর্তমান লাইনে "মান" এ যায়।

তারপরে আমরা কেবলমাত্র [ডি] বাকী রেখার একাদশটি, 70 কলামে লাফিয়ে উঠি (বা আপনার ক্ষেত্রে যা কিছু প্রয়োজন) এবং [পি] আমরা ঠিক কী মুছে ফেলেছি তা বলি ut এর অর্থ এই নয় যে আমাদের সন্ধান পর্যন্ত আমাদের বিস্তৃত লাইনের প্রস্থ নির্ধারণ করতে হবে। যদি আপনি সেই তথ্যটি আপনার স্ট্যাটাসলাইনে না রাখেন তবে আপনি সাধারণ মোড কমান্ড 'g ctrl-g' লিখে কার্সারের কলামটি দেখতে পাবেন। এছাড়াও মনে রাখবেন যে যে কলামটি বিদ্যমান নেই তাতে লাফিয়ে ফেলার জন্য 'ভ্যুচুয়ালিট' সেটিংস প্রয়োজন!

আমি অনুসন্ধান শব্দেরটি: g (lobal) কমান্ডটি খালি রেখে দিয়েছি, যেহেতু আমরা একটি ভিজ্যুয়াল ব্লক ব্যবহার করেছি এবং প্রতিটি লাইনকে প্রভাবিত করতে চেয়েছিলাম, তবে আপনি ভিজ্যুয়াল নির্বাচন (এবং "'<,'>") ব্যবহার করে ছেড়ে যেতে পারেন এবং রেখে দিতে পারেন পরিবর্তে সেখানে একটি অনুসন্ধান শব্দ। অথবা আরও সূক্ষ্ম / সহজে জিনিসগুলিকে সংকীর্ণ করতে একটি ভিজ্যুয়াল নির্বাচন এবং একটি অনুসন্ধান শব্দকে একত্রিত করুন।

আমি সম্প্রতি শিখেছি এমন কিছু এখানে রয়েছে: আপনি যদি একটি জটিল কমান্ড মোড কমান্ডটি নিয়ে গণ্ডগোল সৃষ্টি করেন তবে 'ইউ' দিয়ে পূর্বাবস্থায় ফিরে যান (যদি এটি বাফারকে প্রভাবিত করে), তবে একটি বিশেষ কমান্ড ইতিহাসের বাফার প্রবেশ করতে "q:" টিপুন যা প্রচলিত বাফারের মতো কাজ করে । যে কোনও লাইন সম্পাদনা করুন এবং এন্টার টিপুন, এবং পরিবর্তিত কমান্ডটি একটি নতুন কমান্ড হিসাবে প্রবেশ করা হবে। অনিবার্য যদি আপনি প্রথমবারের মতো পুরোপুরি সঠিকভাবে তৈরি করার বিষয়ে চাপ দিতে না চান।


0

আমি পাইথন স্ক্রিপ্ট লিখেছিলাম যা ব্যবহারকারীরা ভিএম এর বাইরেও যে কোনও ধরণের পাঠকে মূলত কলমেজ করতে দেয়। এটি উইন্ডো বা ম্যাক ব্যবহারকারীদের জন্য কাজ করবে কিনা তা নিশ্চিত নয়।

কলামিস.পি গিস্ট

ভিএম এ থাকাকালীন ব্যবহার।

:'<,'>!columnice =

এটি বিস্ময়কর হিসাবে চিহ্ন হিসাবে ব্যবহার করবে। যদিও সীমানাটি ফেলে দেওয়া হয় না।


0

আমার .vimrc এ এটি আছে।

command! CSV set nowrap | %s/,/,|/g | %!column -n -t -s "|" 

এটি কমা রাখার সময় কলামগুলি প্রান্তিক করে তোলে যা সঠিক পড়ার জন্য পরে প্রয়োজন হতে পারে। উদাহরণস্বরূপ, পাইথন পান্ডাস সহ read_csv(..., skipinitialspace=True), এই স্মার্ট বিকল্পটির জন্য পান্ডাসকে ধন্যবাদ, অন্যথায় ভিমে %s/,\s\+/,/g। আপনার columnবিকল্পটি যদি আউটপুট-বিভাজক হিসাবে অনুমান করা যায় তবে এটি সহজ হতে পারে , আমি জানি না এবং কেন আমি নিশ্চিত নই (কলামের জন্য আমার ম্যান পেজটি 2004, উবুন্টু 18.04-তে বলে, নিশ্চিত নয় যে উবুন্টু একটি নতুন সংস্করণ পাবে) । যাইহোক, এটি আমার পক্ষে কাজ করে, এবং আপনার কোনও পরামর্শ থাকলে মন্তব্য করুন।

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