উত্তর:
আমার পরীক্ষাগুলি অনুসারে গতি কমানোর (কোনও ইউটিএফ -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 এর জন্য ব্যবহার করুন