bash - study - इलेक्टोरल पॉलिटिक्स क्लास ९ नोट्स इन हिंदी




निर्देशिका में कोड की सभी पंक्तियों को दोबारा कैसे गिनें? (20)

डब्ल्यूसी-एल? बेहतर जीआरईपी-सी ^ का उपयोग करें

wc -l? गलत! डब्ल्यूसी कमांड नई लाइन कोड की गणना करता है, लाइनों नहीं ! जब फ़ाइल में अंतिम पंक्ति नए लाइन कोड के साथ समाप्त नहीं होती है, तो यह गिना नहीं जाएगा!

यदि आप अभी भी गिनती लाइन चाहते हैं, तो grep -c ^ का उपयोग करें, पूर्ण उदाहरण:

#this example prints line count for all found files
total=0
find /path -type f -name "*.php" | while read FILE; do
     #you see use grep instead wc ! for properly counting
     count=$(grep -c ^ < "$FILE")
     echo "$FILE has $count lines"
     let total=total+count #in bash, you can convert this for another shell
done
echo TOTAL LINES COUNTED:  $total

अंत में, wc -l जाल के लिए बाहर देखो (गिनती दर्ज करता है, लाइनों नहीं !!!)

हमारे पास एक PHP अनुप्रयोग है और एक विशिष्ट निर्देशिका और इसकी उपनिर्देशिका के तहत कोड की सभी पंक्तियों को गिनना चाहता हूं। हमें टिप्पणियों को अनदेखा करने की आवश्यकता नहीं है, क्योंकि हम सिर्फ एक मोटा विचार पाने की कोशिश कर रहे हैं।

wc -l *.php 

वह आदेश किसी दिए गए निर्देशिका में बहुत अच्छा काम करता है, लेकिन उपनिर्देशिका को अनदेखा करता है। मैं सोच रहा था कि यह काम कर सकता है, लेकिन यह 74 लौट रहा है, जो निश्चित रूप से मामला नहीं है ...

find . -name '*.php' | wc -l

सभी फाइलों में फ़ीड करने के लिए सही वाक्यविन्यास क्या है?


POSIX

प्रत्येक फ़ाइल में रेखाएं:

find . -name '*.php' -type f | xargs wc -l

फ़ाइल पथ द्वारा क्रमबद्ध प्रत्येक फ़ाइल में रेखाएं

find . -name '*.php' -type f | sort | xargs wc -l

प्रत्येक फ़ाइल में रेखाएं, रेखाओं की संख्या से क्रमबद्ध, अवरोही

find . -name '*.php' -type f | xargs wc -l | sort -nr

सभी फाइलों में कुल लाइनें

find . -name '*.php' -type f | xargs cat | wc -l

आप cloc.sourceforge.net उपयोगिता का उपयोग कर सकते हैं जो इस सटीक उद्देश्य के लिए बनाया गया है। यह प्रत्येक भाषा में प्रत्येक पंक्ति की प्रत्येक पंक्ति की रिपोर्ट करता है, साथ में उनमें से कितने टिप्पणियां आदि हैं।

उपयोग और आउटपुट उदाहरण:

$ cloc --exclude-lang=DTD,Lua,make,Python .
    2570 text files.
    2200 unique files.                                          
    8654 files ignored.

http://cloc.sourceforge.net v 1.53  T=8.0 s (202.4 files/s, 99198.6 lines/s)
-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
Javascript                    1506          77848         212000         366495
CSS                             56           9671          20147          87695
HTML                            51           1409            151           7480
XML                              6           3088           1383           6222
-------------------------------------------------------------------------------
SUM:                          1619          92016         233681         467892
-------------------------------------------------------------------------------

आप cloc.sourceforge.net भी कोशिश कर सकते हैं (पर्ल की आवश्यकता है)


आपने यह निर्दिष्ट नहीं किया है कि कितनी फाइलें हैं या वांछित आउटपुट क्या है। क्या यह वही है आप जिसकी तलाश में हैं:

find . -name '*.php' | xargs wc -l

आश्चर्य की बात है कि खोजने के लिए कोई जवाब नहीं है -exec और awk । ये रहा:

find . -type f -exec wc -l {} \; | awk '{ SUM += $0} END { print SUM }'

यह स्निपेट सभी फाइलों के लिए पाता है ( -type f )। फ़ाइल एक्सटेंशन द्वारा ढूंढने के लिए, नाम-नाम का उपयोग करें:

find . -name *.py -exec wc -l {} \; | awk '{ SUM += $0} END { print SUM }'

एक सीधा जो तेजी से होगा, खोज की सभी खोज / फ़िल्टरिंग शक्ति का उपयोग करेगा, बहुत अधिक फाइलें (संख्या तर्क ओवरफ्लो) होने पर असफल नहीं होते हैं, xargs का उपयोग किये बिना, उनके नाम पर मजाकिया प्रतीकों वाली फ़ाइलों के साथ ठीक काम करते हैं, नहीं बाहरी आदेशों की बेकार उच्च संख्या लॉन्च करें ( find लिए + find लिए धन्यवाद)। हेयर यू गो:

find . -name '*.php' -type f -exec cat -- {} + | wc -l

कम से कम ओएस एक्स पर, कुछ अन्य उत्तरों में सूचीबद्ध + xarg + wc कमांड बड़े लिस्टिंग पर कई बार "कुल" प्रिंट करता है, और कोई पूर्ण कुल दिया गया नहीं है। मैं निम्नलिखित कमांड का उपयोग कर .c फ़ाइलों के लिए एक एकल प्राप्त करने में सक्षम था:

find . -name '*.c' -print0 |xargs -0 wc -l|grep -v total|awk '{ sum += $1; } END { print "SUM: " sum; }'


केवल स्रोतों के लिए:

wc `find`

फिल्टर करने के लिए, बस grep का उपयोग करें

wc `find | grep .php$`

जबकि मुझे स्क्रिप्ट पसंद है, मैं इसे पसंद करता हूं क्योंकि यह कुल फ़ाइल तक प्रति फ़ाइल सारांश भी दिखाता है

wc -l `find . -name "*.php"`

फिर भी एक और आदेश सभी फाइलों का योग प्राप्त करने के लिए (पाठ्यक्रम का लिनक्स)

find ./ -type f -exec wc -l {}  \; | cut -d' ' -f1 | paste -sd+ | bc

अन्य उत्तरों से मुख्य अंतर:

  1. find -exec का उपयोग कर,
  2. पेस्ट (कट के साथ) का उपयोग कर,
  3. बीसी का उपयोग कर

फिर भी एक और बदलाव :)

$ find -name '*.php' | xargs cat | wc -l

संपादित करें: यह फ़ाइल-दर-फ़ाइल के बजाय कुल योग देगा।


मुझे पता है कि सवाल को bash रूप में टैग किया गया है, लेकिन ऐसा लगता है कि जिस समस्या को आप हल करने का प्रयास कर रहे हैं वह भी PHP से संबंधित है।

सेबेस्टियन PHPLOC ने PHPLOC नामक एक उपकरण लिखा जो आप चाहते हैं और इसके शीर्ष पर आपको एक परियोजना की जटिलता का एक सिंहावलोकन प्रदान करता है। यह इसकी रिपोर्ट का एक उदाहरण है:

Size
  Lines of Code (LOC)                            29047
  Comment Lines of Code (CLOC)                   14022 (48.27%)
  Non-Comment Lines of Code (NCLOC)              15025 (51.73%)
  Logical Lines of Code (LLOC)                    3484 (11.99%)
    Classes                                       3314 (95.12%)
      Average Class Length                          29
      Average Method Length                          4
    Functions                                      153 (4.39%)
      Average Function Length                        1
    Not in classes or functions                     17 (0.49%)

Complexity
  Cyclomatic Complexity / LLOC                    0.51
  Cyclomatic Complexity / Number of Methods       3.37

जैसा कि आप देख सकते हैं, प्रदान की गई जानकारी डेवलपर के परिप्रेक्ष्य से बहुत अधिक उपयोगी है, क्योंकि यह मोटे तौर पर आपको बता सकती है कि इससे पहले कि आप इसके साथ काम करना शुरू कर सकें, एक परियोजना कितनी जटिल है।


मेरे लिए अधिक सामान्य और सरल, मान लीजिए कि आपको अलग-अलग नाम एक्सटेंशन की फाइलों की गणना करने की आवश्यकता है (कहें, मूल निवासी भी)

wc `find . -name '*.[h|c|cpp|php|cc]'`

मैंने इस इनलाइन-स्क्रिप्ट का उपयोग किया जो मैं src-project की निर्देशिका से लॉन्च करता हूं:

 for i in $(find . -type f); do rowline=$(wc -l $i | cut -f1 -d" "); file=$(wc -l $i | cut -f2 -d" "); lines=$((lines + rowline)); echo "Lines["$lines"] " $file "has "$rowline"rows."; done && unset lines

यह इस आउटपुट का उत्पादन करता है:

Lines[75]  ./Db.h has 75rows.
Lines[143]  ./Db.cpp has 68rows.
Lines[170]  ./main.cpp has 27rows.
Lines[294]  ./Sqlite.cpp has 124rows.
Lines[349]  ./Sqlite.h has 55rows.
Lines[445]  ./Table.cpp has 96rows.
Lines[480]  ./DbError.cpp has 35rows.
Lines[521]  ./DbError.h has 41rows.
Lines[627]  ./QueryResult.cpp has 106rows.
Lines[717]  ./QueryResult.h has 90rows.
Lines[828]  ./Table.h has 111rows.

यदि आप अपने परिणामों को लाइनों की संख्या से क्रमबद्ध करना चाहते हैं, तो आप बस जोड़ सकते हैं | sort या | sort -r | sort -r (अवरोही क्रम के लिए -r ) पहले जवाब में, जैसे:

find . -name '*.php' | xargs wc -l | sort -r

यदि बैश (या जेडएसएच) के एक निश्चित हाल के संस्करण का उपयोग करते हुए, यह बहुत आसान है:

wc -l **/*.php

बैश खोल में इसे globstar विकल्प सेट करने की आवश्यकता होती है, अन्यथा ** ग्लोब-ऑपरेटर रिकर्सिव नहीं है। इस सेटिंग को सक्षम करने के लिए, जारी करें

shopt -s globstar

इसे स्थायी बनाने के लिए, इसे प्रारंभिक फ़ाइलों में से एक ( ~/.bashrc , ~/.bash_profile इत्यादि) में जोड़ें।


यूनिक्स जैसी प्रणालियों पर, cloc नामक एक उपकरण है जो कोड आंकड़े प्रदान करता है।

मैं अपने कोड बेस में एक यादृच्छिक निर्देशिका में भाग गया यह कहता है:

      59 text files.
      56 unique files.                              
       5 files ignored.

http://cloc.sourceforge.net v 1.53  T=0.5 s (108.0 files/s, 50180.0 lines/s)
-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
C                               36           3060           1431          16359
C/C++ Header                    16            689            393           3032
make                             1             17              9             54
Teamcenter def                   1             10              0             36
-------------------------------------------------------------------------------
SUM:                            54           3776           1833          19481
-------------------------------------------------------------------------------

प्रयत्न:

find . -name '*.php' | xargs wc -l

एसएलओसीसीउंट टूल भी मदद कर सकता है।

यह कोड पदान की सटीक स्रोत रेखाएं जो भी पदानुक्रम आप इंगित करते हैं, साथ ही साथ कुछ अतिरिक्त आंकड़े भी देंगे।






shell