উত্তর:
জিএনইউ বিশ্রী সমাধান:
awk -v FPAT='[^N[:space:]]' '{ print NF }' file
FPAT='[^N[:space:]]'
- ক্ষেত্রের মান নির্ধারণ করার ধরণ ( N
চর এবং সাদা জায়গা ছাড়া অন্য কোনও চরিত্র )প্রত্যাশিত আউটপুট:
1
1
1
0
1
2
2
awk '{ gsub("[ N]",""); print length() }'
awk '{print gsub(/[^ N]/,"")}'
ধরে নিলাম যে স্থানের অক্ষর এবং অন্য প্রতিটি লাইনের জন্য গণনা প্রয়োজন N
$ perl -lne 'print tr/N //c' ip.txt
1
1
1
0
1
2
2
tr
কতগুলি অক্ষর প্রতিস্থাপন করা হয়েছিল তার রিটার্ন মানc
দেওয়া অক্ষরের সেট পরিপূরক-l
বিকল্পের ব্যবহারটি নোট করুন , একের পর এক ত্রুটি এড়াতে ইনপুট লাইন থেকে নতুন লাইন চরিত্রটি স্ট্রিপ করে এবং মুদ্রণ বিবৃতিতে নিউলাইন অক্ষর যুক্ত করে
আরও জেনেরিক সমাধান
perl -lane 'print scalar grep {$_ ne "N"} @F' ip.txt
-a
@F
অ্যারেতে সংরক্ষিত, সাদা-স্পেসে স্বয়ংক্রিয়ভাবে ইনপুট লাইন বিভক্ত করার বিকল্পgrep {$_ ne "N"} @F
@F
স্ট্রিংয়ের সাথে মেলে না এমন সমস্ত উপাদানগুলির অ্যারে প্রদান করেN
grep {!/^N$/} @F
scalar
অ্যারের সংখ্যার দেবেবিকল্প অজানা সমাধান:
awk '{ print gsub(/[^N[:space:]]/,"") }' file
gsub(...)
- gsub()
ফাংশনটি প্রতিস্থাপকের সংখ্যা প্রদান করে।আউটপুট:
1
1
1
0
1
2
2
আরেকটি awk
পদ্ধতির ( খালি লাইনের জন্য -1 ফিরে আসবে )।
awk -F'[^N ]' '$0=NF-1""' infile
বা জটিল, এটা ফিরে আসবে -1 খালি লাইন, 0 অনুসরণকারী শূণ্যস্থান (ট্যাব / শূন্যস্থানের) শুধুমাত্র লাইন।
awk -F'[^N \t]+' '$0=NF-1""' infile
-1
খালি লাইনের জন্য মুদ্রণ করবে ... তবে তারপরে কেবল এন / স্পেস বনাম খালি লাইন দিয়ে তৈরি লাইনটি আলাদা করা বাঞ্ছনীয় হতে পারে ...
tr
এবং পসিক্স শেল স্ক্রিপ্ট:
tr -d 'N ' < file | while read x ; do echo ${#x} ; done
bash
, ksh
এবং zsh
:
while read x ; do x="${x//[ N]}" ; echo ${#x} ; done < file
awk '{print length()}'
ধীরে ধীরে শেল লুপিং এড়াতে ব্যবহার করতে পারেন .. তবে তারপরেও কেউ এটিকে নিজেই করিয়ে দিতে পারে ...
awk
লুপিং হয় দ্রুত শেল লুপিং করে। তবে শেলটি সর্বদা স্মৃতিতে থাকে এবং এটি awk
নাও হতে পারে - যখন awk
ইতিমধ্যে লোড করা হয় না, বা অদলবদল হয় না তখন এটি লোড করার ওভারহেড, ( সময়টি হারিয়ে যায় ), চালনার সুবিধার চেয়ে বেশি হতে পারে awk
- বিশেষত একটি ছোট ক্ষেত্রে লুপ. এই জাতীয় ক্ষেত্রে ( যেমন এই ক্ষেত্রে) ধীরawk
হতে পারে ।
awk
শেল স্ক্রিপ্ট ব্যবহার করা এই জাতীয় সিস্টেমকে সমস্ত চৌকিতে ক্রল করতে পারে। সাধারণত: একই ল্যাটেন্সি ড্রাগটি সীমিত ফার্মওয়্যারের সিস্টেমে বা ভারী বোঝার অধীনে যে কোনও সিস্টেমে প্রযোজ্য।
সংক্ষিপ্ত সমন্বয় tr
এবং awk
:
$ tr -d ' N' <file.in | awk '{ print length }'
1
1
1
0
1
2
2
এটি ইনপুট ফাইল থেকে সমস্ত স্পেস একটি এনএস মুছে ফেলে এবং awk
কেবল প্রতিটি লাইনের দৈর্ঘ্য মুদ্রণ করে।
আর একটি সহজ উপায় অজগর থেকে এটি করা, যা বেশিরভাগ ইউনিক্স পরিবেশে প্রাক-ইনস্টল করা হয়। একটি .py ফাইলে নিম্নলিখিত কোডটি ফেলে দিন:
with open('geno') as f:
for line in f:
count = 0
for word in line.split():
if word != 'N':
count += 1
print(count)
এবং তারপরে:
python file.py
আপনার টার্মিনাল থেকে। উপরেরটি যা করে তা হ'ল:
sed
যত্ন নেই এমনawk
sed 's/N//g ; s/\s//g' file | awk '{ print length($0); }'