উত্তর:
আমার পরীক্ষাগুলি অনুসারে গতি কমানোর (কোনও ইউটিএফ -8 লোকালে একটি জিএনইউ সিস্টেমে এবং এএসসিআইআই ইনপুট) হ্রাসের ক্রমে:
grep '.\{80\}' file
perl -nle 'print if length$_>79' file
awk 'length>79' file
sed -n '/.\{80\}/p' file
perl¹ এক (বা awk/ grep/ sedবাস্তবায়নের জন্য (যেমন mawkবা ব্যস্তবক্স) যা বহু-বাইট অক্ষরকে সমর্থন করে না) বাদে , যা বাইটের পরিবর্তে অক্ষরের সংখ্যার ( LC_CTYPEলোকেলের সেটিং অনুসারে ) দৈর্ঘ্য গণনা করে ।
যদি ইনপুটটিতে এমন কোনও বাইট থাকে যা বৈধ অক্ষরের অংশ তৈরি করে না (যা কখনও কখনও লোকেলের অক্ষর সেটটি ইউটিএফ -8 থাকে এবং ইনপুটটি আলাদা এনকোডিংয়ে থাকে তখন), তবে সমাধান এবং সরঞ্জাম প্রয়োগের উপর নির্ভর করে সেই বাইটগুলি হয় 1 অক্ষর হিসাবে গণনা করা হয়, বা 0 বা মিল না .।
উদাহরণস্বরূপ, একটি ইউটিএফ -8 লোকালে 30 aস 0x80 বাইট, 30 bএস, 0x81 বাইট এবং 30 ইউটিএফ -8 éএস (0xc3 0xa9 হিসাবে এনকোডড) থাকা একটি লাইন .\{80\}জিএনইউ grep/ sed(যে স্ট্যান্ডসোন 0x80 বাইট হিসাবে মিলবে না) মেলে না .), এর দৈর্ঘ্য 30 + 1 + 30 + 1 + 2 * 30 = 122 এর সাথে perlবা mawk, 3 * 30 = 90 এর সাথে হবে gawk।
আপনি যদি বাইটস এর শর্তাবলী গণনা করতে চান, Cসঙ্গে লোকেল ঠিক করুন LC_ALL=C grep/awk/sed...।
এটির 4 টি সমাধানের উপরের রেখায় 122 টি অক্ষর রয়েছে তা বিবেচনা করবে। ইন perlএবং জিএনইউ সরঞ্জামগুলি ব্যতীত আপনার কাছে এখনও এমন রেখাগুলির জন্য সম্ভাব্য সমস্যা রয়েছে যাগুলিতে নুল অক্ষর (0x0 বাইট) রয়েছে।
Though perlআচরণটি PERL_UNICODEযদিও পরিবেশের পরিবর্তনশীল দ্বারা প্রভাবিত হতে পারে
awkআপনি যদি ড্রপ করেন তবে এটি আরও কাছে আসতে পারে ($0), যা যাইহোক অন্তর্নিহিত;)।
^এটি কিছুটা দ্রুত: উদাহরণস্বরূপ grep '^.\{80\}' file।
grep '^.\{1000\}' fileফিরে আসার grep: invalid repetition count(s)সময় awk 'length>1000' fileসাফল্য পাওয়া যায়))
শেল পদ্ধতির:
while IFS= read -r line || [ -n "$line" ];
do
[ "${#line}" -gt 79 ] && printf "%s\n" "$line"
done < input.txt
পাইথন পদ্ধতির:
python -c 'import sys;f=open(sys.argv[1]);print "\n".join([ l.strip() for l in f if len(l) >79 ]);f.close()' input.txt
বা পাঠযোগ্যতার জন্য একটি শর্ট স্ক্রিপ্ট হিসাবে:
#!/usr/bin/env python
import sys
with open(sys.argv[1]) as f:
for line in f:
if len(line) > 79:
print line.strip()
আমরা যদি newline অক্ষর বাদ দেওয়ার চেয়েছিলেন \nগণনার থেকে, আমরা করতে পারেন if len(line) > 79হতেif len(line.strip()) > 79
পার্শ্ব নোট: এটি পাইথন ২.7 এর বাক্য গঠন। print()পাইথন 3 এর জন্য ব্যবহার করুন