কমান্ড ইউনিক-সি শুরুতে একটি সাদা জায়গা রেখেছিল কেন?


11

শেল স্ক্রিপ্টে আমার এই কোডটি রয়েছে:

sort input | uniq -c | sort -nr > output

ইনপুট ফাইলে কোনও পূর্ববর্তী সাদা স্পেস ছিল না, তবে আউটপুট থাকে। আমি কিভাবে এটা ঠিক করব? এই বাশ আছে

উত্তর:


13

ইউনিকের ডিফল্ট আচরণ হ'ল 7 স্পেস প্রশস্ত একটি লাইনের ফ্রিকোয়েন্সিটিকে ন্যায়সঙ্গত করা, তারপরে একটি একক স্পেসের সাহায্যে আইটেম থেকে ফ্রিকোয়েন্সি আলাদা করুন।

সূত্র: https://www.tinnuxrain.com/articles/tweaking-uniq-c

সেড সহ নেতৃস্থানীয় স্থানগুলি সরান:

$ sort input | uniq -c | sort -nr | sed 's/^\s*//' > output

2
7 টি স্পেস, ওরফে "একটি ট্যাবের চেয়ে কম"।
ক্রাইলিস

তারপরে আপনি ট্যাবগুলি দিয়ে আলাদা করতে পারেন এর মতো কিছু perl -pe 's/ *(\d+) /$1\t/'( এখানে কিছু বিকল্প )। ক্লিপবোর্ডে পাইপ xclip -selection cসরাসরি স্প্রেডশীটে পেস্ট করতে।
পাবলো বিয়ানচি

5

uniq -cনেতৃস্থানীয় সাদা স্থান যোগ করুন। যেমন

$ echo test
test
$ echo test | uniq -c
      1 test

পাইপলাইনটি সরাতে আপনি একটি কমান্ড যুক্ত করতে পারেন। যেমন

$ echo test | uniq -c | sed 's/^\s*//'
1 test

1

FWIW আপনি আরও নমনীয়তার জন্য একটি পৃথক বাছাইয়ের সরঞ্জাম ব্যবহার করতে পারেন। পাইথন এমন একটি হাতিয়ার।

সূত্র

#!/usr/bin/python3
import sys, operator, collections

counter = collections.Counter(map(operator.methodcaller('rstrip', '\n'), sys.stdin))
for item, count in counter.most_common():
    print(count, item)

তাত্ত্বিকভাবে এটি sortবৃহত ইনপুটগুলির সরঞ্জামের চেয়ে আরও দ্রুত হবে কারণ উপরের প্রোগ্রামটি বাছাই করা তালিকার পরিবর্তে ডুপ্লিকেট লাইন সনাক্ত করতে হ্যাশ টেবিল ব্যবহার করে। (হায় এটি এটিকে প্রাকৃতিক শৃঙ্খলার পরিবর্তে স্বেচ্ছাসেবী হিসাবে গণনার রেখাগুলি স্থাপন করে; এটি সংশোধন করা যেতে পারে এবং এখনও দুটি sortঅনুরোধের চেয়ে দ্রুত হতে পারে ))

আউটপুট ফরমেট

আপনি আউটপুট ফরম্যাট আরো নমনীয়তা চান আপনি মধ্যে সন্ধান করতে পারেন print()এবং format()বিল্ট-ইন ফাংশন।

উদাহরণস্বরূপ, আপনি যদি আটটি শীর্ষে জিরো দিয়ে অষ্টালে গণনা নম্বর মুদ্রণ করতে চান এবং একটি এনএলআর লাইন টার্মিনেটর সহ একটি স্পেস অক্ষরের পরিবর্তে একটি ট্যাব অনুসরণ করেন তবে এর সাথে শেষ লাইনটি প্রতিস্থাপন করুন:

    print(format(count, '08o'), item, sep='\t', end='\0')

ব্যবহার

স্ক্রিপ্টটি কোনও ফাইলে সংরক্ষণ করুন, বলুন sort_count.pyএবং পাইথনের সাহায্যে এটি আহ্বান করুন:

python3 sort_count.py < input

0
uniq -c -i | tr -s ' ' | cut -c 2-

নেতৃস্থানীয় হোয়াইটস্পেসগুলি টিআর-সি-র সাথে একক শ্বেত স্পেসে অনুবাদ করুন এবং তারপরে কাটা-সি দিয়ে দ্বিতীয় অক্ষর থেকে আউটপুট মুদ্রণ করুন।


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