টেবিল বিভাজনিত তালিকা সুন্দরভাবে কমান্ড


39

কখনও কখনও, আমি একটি ইনপুট ট্যাব দ্বারা পৃথক তালিকা হিসাবে পেয়ে যাচ্ছি, উদাহরণস্বরূপ, যা পুরোপুরি সাজানো হয় না

var1  var2  var3
var_with_long_name_which_ruins_alignment  var2 var3

এগুলি প্রান্তিককরণের জন্য কী কী সহজ উপায় আছে?

var1                                      var2  var3
var_with_long_name_which_ruins_alignment  var2  var3

ইলাস্টিক ট্যাবস্টপের উপর ভিত্তি করে কেউ সমাধান করতে পারে: নিকগ্রাভগার্ড
মাইকেল


এবং একটি গো বাস্তবায়ন: golang.org/pkg/tabwriter
মাইকেল

16
এটিতে পাইপ দেওয়ার চেষ্টা করা হয়েছে column -t?
অ্যালেক্স

7
মাইকেলের পার্ল উত্তরের শেষে টিক দেওয়া হ'ল ক্লিঙ্কার মন্তব্য (মাইকেলের মাধ্যমে) ... columns -tসাধারণ সাদা স্থানগুলিতে কাজ করে। শুধুমাত্র ট্যাবগুলির সাথে কাজ করতে ,column -t -s $'\t'
পিটার.ও

উত্তর:


51

সুতরাং, উত্তরটি হয়ে যায়:

column -t file_name

মনে রাখবেন যে এটি কোনও ট্যাবগুলি নয়, কোনও সাদা জায়গাতে কলামগুলি বিভক্ত করে । আপনি যদি কেবল ট্যাবগুলিতে বিভক্ত করতে চান তবে ব্যবহার করুন:

column -t -s $'\t' -n file_name

-s $'\t'সেট ট্যাবে বিভেদক কেবল -nসংরক্ষণ খালি COLUMNS (সংলগ্ন ট্যাব)।

পিএস: কেবল উল্লেখ করতে চাই যে ক্রেডিট অ্যালেক্সেরও যায় । মূল ইঙ্গিতটি তিনি প্রশ্নের একটি মন্তব্য হিসাবে সরবরাহ করেছিলেন, তবে কখনও উত্তর হিসাবে পোস্ট করা হয়নি।


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

নিশ্চিত! আমিও অজানা ছিলাম column:)
বরুন

1
এটি আদর্শ columnবলে মনে হয় তবে দুর্ভাগ্যবশত যখন এটি খালি কোষগুলির মুখোমুখি হয় to এই পোস্টটি দেখুন । আপনার কোন সংস্করণ রয়েছে তার উপর নির্ভর করে columnআপনি এটি -nসংশোধন করার বিকল্পটি নির্দিষ্ট করতে সক্ষম হতে পারেন ।
জন জে ক্যামিলারি

এছাড়াও, এই কমান্ডটি কেবল ট্যাবগুলিতেই বিভক্ত হবে না, তবে "যে কোনও সাদা স্থান" এও। কেবল ট্যাবগুলিতে বিভক্ত করতে, ব্যবহার করুন column -t -s $'\t'
ফ্রিটজ

3

এটি করার জন্য এখানে একটি স্ক্রিপ্ট রয়েছে:

aligntabs.pl

#!/usr/bin/perl

my $delim = '\s*\t\s*';

my %length = ();
my @lines = ();
for my $line (<>) {
    chomp $line;
    my @words = split $delim, $line;
    my $numwords = scalar(@words);
    for my $i (0..$numwords-1) {
        my $maxlen = $length{$i} // 0;
        my $thislen = length($words[$i]);
        $maxlen = ($thislen > $maxlen)? $thislen: $maxlen;
        $length{$i} = $maxlen;
    }
    push @lines, [@words];
}

foreach my $wordsref (@lines) {
    my @words = @$wordsref;
    my $numwords = scalar(@words);
    for my $i (0..$numwords-1) {
        if ($i < $numwords-1) {
            my $fieldlen = $length{$i};
            printf "%-${fieldlen}s ", $words[$i];
        }
        else {
            print $words[$i];
        }
    }
    print "\n";
}

ব্যবহার

$ aligntabs.pl < infile
var1                                     var2 var3
var_with_long_name_which_ruins_alignment var2 var3

ওম, ধন্যবাদ, তবে আমি আশা করছিলাম যে এটি করার আরও একটি "পোর্টেবল" উপায় আছে।
এলাজার লেইবোভিচ

আমিও! একটিও খুঁজে পেল না। prএবং nlবিন্যাস করার জন্য দুটি মৌলিক সরঞ্জাম, এবং যে পরে awk, sed, perl, ইত্যাদি
Mikel

1
এটি column
এতটা

2
@ এলজার দুর্দান্ত! column -t -s $'\t'কাজটি মনে হচ্ছে
মাইকেল

3

ম্যানুয়াল ট্যাব স্টপগুলির জন্য: expand -t 42,48

অ্যালেক্সের পরামর্শ অনুসারে স্বয়ংক্রিয় ট্যাব স্টপগুলির জন্য :column -t

( expandসমস্ত পসিক্স সিস্টেমে রয়েছে BS columnএটি একটি বিএসডি ইউটিলিটি, অনেকগুলি লিনাক্স বিতরণেও উপলব্ধ))


1

পিটার.ওর মন্তব্য অনুসরণ করে যা আমি কী প্রান্তিককরণ করতে চেয়েছিলাম (ট্যাব সীমিত ডেটা, টিএসভি), এই শব্দবন্ধটি খুব সুন্দরভাবে কাজ করে:

column -t -s $'\t' /Users/me/data.csv | less --chop-long-lines

0
sed 's/||/| |/g;s/||/| |/g' filename-here | column -s"|" -t | less -#2 -N -S

ব্যাখ্যা:

শেড ফাঁকা সীমানারগুলির মধ্যে একটি স্থান যুক্ত করবে

কলামগুলি কলামগুলির মধ্যে সমান ব্যবধান যুক্ত করবে

zydsld|asl|asd
das|aosdk|dd

হয়ে

zydsld|asl  |asd
das   |aosdk|dd 

কম একটি ফাইল দর্শকের আউটপুট খুলবে। -N এবং -S যথাক্রমে লাইন নম্বর যুক্ত করবে এবং মোড়কে অক্ষম করবে


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

0

মিলার ( http://johnkerl.org/miller/doc ) এর সাথে আপনার সুন্দর প্রিন্ট আউটপুট রয়েছে।

চালান

mlr --inidx --ifs "\t" --opprint cat input | tail -n +2

আছে

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