বাশ-এ, আমি কীভাবে কোনও প্রকল্পে কোডের নন-ফাঁকা লাইনের সংখ্যা গণনা করব?
sloc
এবং cloc
সেই কোড লাইন গণনা করার জন্য এখানে রয়েছে।
বাশ-এ, আমি কীভাবে কোনও প্রকল্পে কোডের নন-ফাঁকা লাইনের সংখ্যা গণনা করব?
sloc
এবং cloc
সেই কোড লাইন গণনা করার জন্য এখানে রয়েছে।
উত্তর:
cat foo.c | sed '/^\s*$/d' | wc -l
এবং যদি আপনি মন্তব্যগুলি ফাঁকা রেখা বিবেচনা করেন:
cat foo.pl | sed '/^\s*#/d;/^\s*$/d' | wc -l
যদিও, এটি ভাষা নির্ভর।
< foo.pl sed 'stuff' | wc -l
।
#!/bin/bash
find . -path './pma' -prune -o -path './blog' -prune -o -path './punbb' -prune -o -path './js/3rdparty' -prune -o -print | egrep '\.php|\.as|\.sql|\.css|\.js' | grep -v '\.svn' | xargs cat | sed '/^\s*$/d' | wc -l
উপরেরগুলি আপনাকে একটি প্রকল্পের জন্য কোডের লাইনগুলি (ফাঁকা লাইনগুলি সরানো) এর মোট গণনা দেবে (বর্তমান ফোল্ডার এবং পুনরাবৃত্তভাবে সমস্ত সাবফোল্ডার)।
উপরের "। .Php, .as, .sql, .css, .js হ'ল ফাইলগুলির এক্সটেনশন হচ্ছে। ভিন্ন এক্সটেনশান সহ যে কোনও ফাইল এড়ানো হবে।
$
গ্রেপ ( ...\.js$|...
) এ একটি যুক্ত করতে হবে অন্যথায় এটি মেলে feature.js.swp
।
find . | egrep '.\.c$|.\.h$' | xargs cat | sed '/^\s*$/d' | wc -l
আপনি যদি শেল স্ক্রিপ্ট ব্যতীত অন্য কিছু ব্যবহার করতে চান তবে CLOC চেষ্টা করুন :
ক্লক অনেক প্রোগ্রামিং ভাষায় ফাঁকা লাইন, মন্তব্য লাইন এবং উত্স কোডের শারীরিক লাইন গণনা করে। এটি পার্ল v5.6 এবং এর উচ্চতর স্ট্যান্ডার্ড বিতরণের বাইরে কোনও নির্ভরতা ছাড়াই পুরোপুরি লেখা হয়েছে (কিছু বাহ্যিক মডিউলগুলির কোডটি ক্লকের মধ্যে এমবেড করা আছে) এবং তাই এটি বেশ বহনযোগ্য।
সাধারণ শেল ইউটিলিটিগুলি ব্যবহার করে এটি করার বিভিন্ন উপায় রয়েছে।
আমার সমাধানটি হ'ল:
grep -cve '^\s*$' <file>
এটি <file> দ্য মেলে না (-v) লাইনগুলিতে অনুসন্ধান করে যা (-e) '^ \ s * $' এর সাথে মেলে যা একটি লাইনের সূচনা, তারপরে 0 বা আরও শ্বেত স্পেস অক্ষর অনুসরণ করে একটি রেখার শেষে (অর্থাত্ সাদা বাক্সের কোনও সামগ্রী নেই), এবং নিজেরাই মিলে যাওয়া লাইনের পরিবর্তে ম্যাচিং লাইনগুলির একটি গণনা প্রদর্শন করুন (-সি)।
পাইপিং জড়িত পদ্ধতিগুলির মধ্যে এই পদ্ধতির একটি সুবিধা wc
হ'ল আপনি একাধিক ফাইল নির্দিষ্ট করতে পারেন এবং প্রতিটি ফাইলের জন্য পৃথক গণনা পেতে পারেন:
$ grep -cve '^\s*$' *.hh
config.hh:36
exceptions.hh:48
layer.hh:52
main.hh:39
-e
প্রয়োজন হয় না. এটি প্যাটার্নের সাধারণ অবস্থানগত অবস্থান এবং আপনি এটির সাথে মজার কিছু করছেন না। তবে আপনার স্টাইলটি যদি স্পষ্টভাবে বোঝায় তবে কিছুই ভুল হবে না।
'ডাব্লুসি' রেখা, শব্দ, অক্ষর গণনা করে তাই সমস্ত লাইন গণনা করতে (ফাঁকাগুলি সহ) ব্যবহার করুন:
wc *.py
ফাঁকা লাইনগুলি ফিল্টার করার জন্য, আপনি গ্রেপ ব্যবহার করতে পারেন:
grep -v '^\s*$' *.py | wc
'-v' গ্রেপকে সমস্ত লাইন আউটপুট করতে বলে যে '^' এর সাথে মেলে এমন একটি রেখার শুরু '\ s *' শূন্য বা আরও শ্বেত স্পেসের অক্ষর '$' একটি লাইনের শেষে * .পি আমার উদাহরণ আপনি গণনা করতে চান এমন সমস্ত ফাইল (বর্তমান দির সমস্ত পাইথন ফাইল) পাইপ আউটপুট ডাব্লু। আপনি চলে যান।
আমি আমার নিজের (জেনুইন) প্রশ্নের উত্তর দিচ্ছি। এটিতে আবৃত স্ট্যাকওভারফ্লো এন্ট্রিটি খুঁজে পেল না।
এই কমান্ডটি নন-ফাঁকা লাইনের সংখ্যা গণনা করে। cat fileName | grep -v ^$ | wc -l
grep -v ^ $ নিয়মিত এক্সপ্রেশন ফাংশন ফাঁকা রেখা উপেক্ষা করে।
cat
এই চেইনে কোনও প্রয়োজন নেই :grep -v ^$ fileName | wl -l
wc -l
গ্রিপ রয়েছে বলেও দরকার নেই -c
:grep -vc ^$ fileName
cat 'filename' | grep '[^ ]' | wc -l
কৌশলটি ঠিক করা উচিত
awk '/^[[:space:]]*$/ {++x} END {print x}' "$testfile"
awk '!/^[[:space:]]*$/{++x} END{print x}'
। বা, যদি আপনি সত্যিই negative awk '{y++} /^[[:space:]]*$/{++x} END{print y-x}'
grep -cvE '(^\s*[/*])|(^\s*$)' foo
-c = count
-v = exclude
-E = extended regex
'(comment lines) OR (empty lines)'
where
^ = beginning of the line
\s = whitespace
* = any number of previous characters or none
[/*] = either / or *
| = OR
$ = end of the line
আমি এই পোস্টটি পোস্ট করেছি অন্য বিকল্পগুলি আমার পক্ষে ভুল উত্তর দিয়েছে। এটি আমার জাভা উত্সের সাথে কাজ করেছে, যেখানে মন্তব্য লাইনগুলি / অথবা * দিয়ে শুরু হয় (আমি বহু লাইনের মন্তব্যে প্রতিটি লাইনে * ব্যবহার করি)।
এখানে একটি বাশ স্ক্রিপ্ট যা কোনও প্রকল্পের কোডের লাইন গণনা করে। এটি উত্স গাছকে পুনরাবৃত্তভাবে অনুসরণ করে এবং এটি ফাঁকা লাইন এবং একক লাইনের মন্তব্যগুলিকে বাদ দেয় যা "//" ব্যবহার করে।
# $excluded is a regex for paths to exclude from line counting
excluded="spec\|node_modules\|README\|lib\|docs\|csv\|XLS\|json\|png"
countLines(){
# $total is the total lines of code counted
total=0
# -mindepth exclues the current directory (".")
for file in `find . -mindepth 1 -name "*.*" |grep -v "$excluded"`; do
# First sed: only count lines of code that are not commented with //
# Second sed: don't count blank lines
# $numLines is the lines of code
numLines=`cat $file | sed '/\/\//d' | sed '/^\s*$/d' | wc -l`
# To exclude only blank lines and count comment lines, uncomment this:
#numLines=`cat $file | sed '/^\s*$/d' | wc -l`
total=$(($total + $numLines))
echo " " $numLines $file
done
echo " " $total in total
}
echo Source code files:
countLines
echo Unit tests:
cd spec
countLines
আমার প্রকল্পের জন্য আউটপুটটি কেমন দেখাচ্ছে তা এখানে :
Source code files:
2 ./buildDocs.sh
24 ./countLines.sh
15 ./css/dashboard.css
53 ./data/un_population/provenance/preprocess.js
19 ./index.html
5 ./server/server.js
2 ./server/startServer.sh
24 ./SpecRunner.html
34 ./src/computeLayout.js
60 ./src/configDiff.js
18 ./src/dashboardMirror.js
37 ./src/dashboardScaffold.js
14 ./src/data.js
68 ./src/dummyVis.js
27 ./src/layout.js
28 ./src/links.js
5 ./src/main.js
52 ./src/processActions.js
86 ./src/timeline.js
73 ./src/udc.js
18 ./src/wire.js
664 in total
Unit tests:
230 ./ComputeLayoutSpec.js
134 ./ConfigDiffSpec.js
134 ./ProcessActionsSpec.js
84 ./UDCSpec.js
149 ./WireSpec.js
731 in total
উপভোগ করুন! - কুরান
এটি আপনার প্রকল্পে থাকা ফাইলগুলির সংখ্যার উপর নির্ভর করবে kind তত্ত্ব আপনি ব্যবহার করতে পারে
grep -c '.' <list of files>
যেখানে আপনি সন্ধানের ইউটিলিটিটি ব্যবহার করে ফাইলগুলির তালিকা পূরণ করতে পারেন।
grep -c '.' `find -type f`
আপনাকে প্রতি ফাইলটিতে একটি লাইন গণনা দেবে।
বর্তমান ডিরেক্টরিতে নির্দিষ্ট ফাইল এক্সটেনশন সহ সমস্ত খালি ফাঁকা লাইনগুলি পুনরাবৃত্তভাবে গণনা করার স্ক্রিপ্ট:
#!/usr/bin/env bash
(
echo 0;
for ext in "$@"; do
for i in $(find . -name "*$ext"); do
sed '/^\s*$/d' $i | wc -l ## skip blank lines
#cat $i | wc -l; ## count all lines
echo +;
done
done
echo p q;
) | dc;
নমুনা ব্যবহার:
./countlines.sh .py .java .html
আপনি যদি কোনও প্রকল্প জুড়ে প্রদত্ত ফাইল এক্সটেনশনের সমস্ত ফাইলের জন্য সমস্ত নন-ফাঁকা লাইনের যোগফল চান:
while read line
do grep -cve '^\s*$' "$line"
done < <(find $1 -name "*.$2" -print) | awk '{s+=$1} END {print s}'
প্রথম আরগটি হ'ল প্রকল্পের বেস ডিরেক্টরি, দ্বিতীয়টি ফাইল এক্সটেনশান। নমুনা ব্যবহার:
./scriptname ~/Dropbox/project/src java
এটি পূর্ববর্তী সমাধানগুলির সংগ্রহের চেয়ে কিছুটা বেশি।
grep -v '^\W*$' `find -type f` | grep -c '.' > /path/to/lineCountFile.txt
বর্তমান ডিরেক্টরি এবং এর উপ-ডিরেক্টরিতে সমস্ত ফাইলের জন্য একটি সামগ্রিক গণনা দেয়।
আছে HTH!
${-[*]} + $@
উদাহরণস্বরূপ এটি কোনও লাইনের সাথে মেলে না । যা অবশ্যই বিশ্বের কোথাও বৈধ কোড। ;) আপনার অর্থ স্থানের। গুলি।
rgrep . | wc -l
বর্তমান চলমান ডিরেক্টরি ডিরেক্টরিতে ফাঁকা রেখার গণনা দেয় the
ইতিমধ্যে লিনাক্সের জন্য 'ডাব্লুসি' নামে একটি প্রোগ্রাম রয়েছে।
মাত্র
wc -l *.c
এবং এটি আপনাকে প্রতিটি ফাইলের জন্য মোট লাইন এবং লাইন দেয়।
wc
ফাঁকা রেখা গণনা করে। ওপি খালি ফাঁকা লাইন গণনা করতে চায়। এটি সত্য যে তিনি ব্যবহার করতে চাইবেন wc
তবে এটি ব্যবহার করে স্ট্রিমটি সম্পাদিত হওয়ার পরেইsed
foo.c
)। কোনও প্রকল্পের লাইনের টোল সংখ্যা সম্পর্কে কোনও চিন্তা (উদাহরণস্বরূপ ডিরেক্টরি কাঠামোর অনেকগুলি ফাইল এবং বাইনারি ফাইলগুলি বাদ দিয়ে)?