আমি কীভাবে পাঠ্য রেখা গণনা করব?


14

পাঠ্য ফাইলে কতগুলি লাইন রয়েছে তা আমি কীভাবে গণনা করব। যেমন:

command file.txt

দ্রষ্টব্য, আমি কেবল খালি খালি লাইনগুলি (সাদা স্থান এবং ট্যাবগুলি গণনা ছাড়াই লাইন) গণনা করতে চাই?



4
প্রশ্নটি সঠিকভাবে সংজ্ঞায়িত করা হয়নি: কেবলমাত্র শ্বেত স্পেস (ফাঁকা স্থান এবং টিএবি) খালি বিবেচিত একটি লাইন?
রোমানো

ঘনিষ্ঠ ভোটাররা : ওপি তার মন্তব্য অনুসারে @ রমানোর স্পষ্টতার পরে প্রশ্ন সম্পাদিত সুতরাং দয়া করে অস্পষ্ট হিসাবে বন্ধ করতে ভোট দিন না
αғসেস

2
@ কাসিয়া এটি এখনও অস্পষ্ট। আমি বুঝতে পারি না যে ওপি কেবল শ্বেতক্ষেত্র (স্পেস, ট্যাব, \r) দিয়ে সা-লাইন গণনা করতে চায় বা সেগুলি এড়িয়ে যায়। বর্তমান শূন্যস্থান সহ সমস্ত গণনা রেখার উত্তর দেয় এবং কেবল খালিগুলি এড়িয়ে যায়।
টার্ডন

@ ইন্টারডন ওপি খালি লাইনগুলি গণনা করতে চান না (খালি লাইনগুলি ( \rঅথবা \n), কেবলমাত্র ট্যাবগুলি এবং কেবলমাত্র ফাঁকা জায়গাগুলির সাথে লাইন) এবং আমার মতামত অনুসারে সেগুলি এড়াতে চান এবং উত্তর অনুযায়ী উত্তর দিয়েছেন আমি যেটা বুঝেছিলাম.
нιηসু

উত্তর:


11

উপরের উত্তরটি সঠিক তবে কিছুটা আলাদা, আপনি grepসহজ কোডের জন্য ব্যবহার করতে পারেনgrep -vc '^$' file.txt

উদাহরণস্বরূপ (এ): file.txt

$grep -vc '^$' file.txt

1    First line         #This is two tabs to comment.
2    
4
3    Fourth line        #Another two tabs to comment.

$2

উদাহরণস্বরূপ (বি): file.txt

$sed '/^$/d' file.txt | wc -l

1    First line         #This is two tabs to comment.
2    
4
3    Fourth line        #Another two tabs to comment.

$4

ফলাফল দেখুন 4! যখন আমরা কেবল দুটি আশা করতে পারি তবে এটি সামগ্রী এবং মন্তব্যের মধ্যে থাকা ট্যাবগুলি গণনা করে।

0 থেকে গণনাগুলি লক্ষ্য করুন এবং গ্রেপ বা সেডের জন্য 1 এর থেকে পৃথক হিসাবে গণনা করা হয়েছে কারণ আমি আরও বিস্তারিত গ্রাপ বা সেডের জন্য অনুসন্ধানের জন্য মনে করি।


1
আপনার দুটি উদাহরণ খালি রেখাগুলি গণনা করবে, কিন্তু ওপি খালি লাইনগুলিতে সমস্ত কিছু গণনা করার জন্য একটি আদেশের অনুরোধ করেছিল
kos

2
আসলে আমি ভুল, sedবিকল্পটি আসলে সঠিক, তবে grep
একটিটি

কেবলমাত্র আংশিকভাবে সঠিক হওয়ার কারণে আমি উত্তরটি ডাউনভোট করেছি, আপনি যখন তা স্থির করেছেন তখন আমাকে একটি মন্তব্য ফেলে দিন যাতে আমি আমার ডাউনটি সরিয়ে ফেলতে পারি
kos

1
@ কোস আমি বেশ নিশ্চিত, আপনি লক্ষ্য করেছেন যে প্রশ্নটি কতটা অস্পষ্ট?
amrx

2
@ কোস, আপনি প্রথম স্থানে ছিলেন, ধন্যবাদ আমি ৩ 36 ঘন্টারও বেশি সময় ধরে ঘুমাইনি, আমার মনে হয় এর বিছানায় সময়!
amrx

12

চেষ্টা করুন sed:

sed '/^$/d' file.txt | wc -l

আপনার যদি কেবল শূণ্যস্থান বা ট্যাবযুক্ত লাইন থাকে এবং আপনি যদি এগুলি গণনা থেকেও উপেক্ষা করতে চান:

sed '/^[[:blank:]]*$/d' file.txt | wc -l

3
আমি ^\s*$কেবল ট্যাব বা স্পেস সহ অ্যাকাউন্টের লাইনগুলিতে গ্রহণ করতে ব্যবহার করব ।
সিলভাইন পাইনাউ

@ সিলওয়াইনপাইনাউ: যুক্ত ..
হিমাইল

1
আমি সম্মত হই যে এটি ওপির প্রশ্ন থেকে পরিষ্কার নয়, তবে ফাঁকা স্থান / ট্যাব সহ পাঠ্য প্রত্যাশিত ফলাফলকে পরিবর্তন করতে পারে, +1।
সিলভাইন পাইনাউ


3

তুমি ব্যবহার করতে পার:

grep -cve '^\s*$' file.txt

এর জন্য যদি আপনার কোনও কমান্ডের প্রয়োজন হয় তবে কেবল নীচের লাইনগুলি আপনার মধ্যে পেস্ট করুন .bashrcএবং আপনার শেল সেশনটি পুনরায় চালু করুন বা একটি নতুন টার্মিনাল খুলুন:

count_lines()
{
    grep -cve '^\s*$' $1
}

উদাহরণ:

count_lines file.txt
42

2

সঙ্গে :

awk 'NF{++count} END{print count}' file

ব্যাখ্যা:

NFক্ষেত্র মোট সংখ্যা, এবং অত: পর এই কপি করে প্রিন্ট ইঙ্গিত শুধুমাত্র অ ফাঁকা রেখা , যেহেতু অ ফাঁকা লাইনে NFচেয়ে বেশী 0এবং সত্য মূল্যায়ন করে। অতএব যখন কোন শূণ্য ফাঁকা রেখা খুঁজে পাওয়া যায় তখন গণনা পতাকাটি বৃদ্ধি করুন এবং শেষের দিকে গণনা পতাকার সর্বশেষ মানটি মুদ্রণ করুন ।END{print count}


1

সম্পাদনা করুন : আপনি সমস্ত কিছু পাইপ cকরার grepপরিবর্তে কেবল বিকল্পটি যুক্ত করতে পারেন wc, আরও কমপ্যাক্ট সংস্করণের জন্য @ মুড়ুর উত্তর দেখুন


সহ grep:

grep -v '^$' file.txt | wc -l

0

পার্ল সমাধান

পার্ল তা করতে পারে। সাধারণ গণনা লাইনগুলি তাই কাজ করে:

$ perl -ne 'END{print $.}' input.txt                                                                                     

আমরা যদি সমস্ত খালি লাইন বাদ দিতে চাই, আমরা এরকম কিছু করব:

$ perl -ne '$c+=1 if not /^$|^\s+$/;END{print $c}' input.txt                                                             

ধরা যাক আমাদের মতো ইনপুট ফাইল আছে

$ cat -n input.txt
     1  Cat; Dog; Squirrel
     2  ORGANISM Animalus terrus
     3  
     4  Sequence: ACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGT
     5  

এখানে মোট 5 টি লাইন, 2 টি খালি লাইন রয়েছে। আমাদের যে কমান্ডটি রয়েছে তা আউটপুট দেয়:

$ perl -ne '$c+=1 if not /^$|^\s+$/;END{print $c}' input.txt                                                             
3

মাল্টি-ফাইল উন্নতি

এটি একটি একক ফাইলের জন্য ভাল কাজ করে। যদি আমরা এটি একাধিক ফাইলে কাজ করতে চাই তবে আমরা এরকম কিছু করতে পারি:

$ perl -ne '$c+=1 if not /^$|^\s+$/;printf("%d %s\n",$c,$ARGV) and $c=0 if eof' input.txt /etc/passwd                    
3 input.txt
52 /etc/passwd
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.