एक फ़ोल्डर में सभी फ़ाइलों में एक स्ट्रिंग की घटनाओं की संख्या की गणना


3

मैं एक फ़ोल्डर में सभी फ़ाइलों में किसी विशेष स्ट्रिंग की सभी संख्याओं की गणना कैसे करूं

उदाहरण के लिए,

1. पाठ: 'हाहाहा हे' 2. पाठ: 'हे हे'

मैं इन सभी फ़ाइलों वाले फ़ोल्डर में 'हा' की घटनाओं की संख्या को गिनना चाहूंगा।

मैं क्या सोच सकता था

grep "हा" | WC-एल

लेकिन यह सिर्फ मुझे फ़ाइल आउटपुट में अलग-अलग घटनाएँ देता है

जवाबों:


4

तुम पास हो। एक फ़ोल्डर में सभी .txt फ़ाइलों के भीतर "हा" की सभी घटनाओं की कुल संख्या प्राप्त करने के लिए:

grep -o "ha" *.txt | wc -l

से man grep:

-o, --only-matching
       Print only the matched (non-empty) parts of a matching line, with
       each such part on a separate output line.

यह काम करता है क्योंकि से प्रत्येक मैच एक अलग लाइन पर मुद्रित होता है, इस प्रकार अनुमति देता है wc -l उन सभी को गिनने के लिए।

डिफ़ॉल्ट रूप से, हालांकि, grep केवल एक लाइन पर पहली घटना पाता है और पूरी लाइन को आउटपुट करता है। इसी तरह, विकल्प -c केवल सभी लाइनों में पहली घटना मिलती है, फिर आउटपुट देता है कि कितने लाइनों में 1 (या अधिक) मैच थे।

संपादित करें:

यहां प्रत्येक व्यक्तिगत फ़ाइल के भीतर होने वाली घटनाओं की कुल संख्या को प्रिंट करने का एक तरीका है (फाइलनाम के साथ):

find *.txt -printf 'echo "$(grep -o "ha" %p | wc -l) %p";' | sh

#Example output
3 file1.txt
1 file2.txt

स्पष्टीकरण:

find *.txt - .txt फाइलें ढूंढता है

-printf - एकल-उद्धरण (स्वरूपित) के बीच मानक आउटपुट के लिए सब कुछ प्रिंट करता है, की घटनाओं को प्रतिस्थापित करता है %p खोज के आउटपुट के साथ (फ़ाइल नाम)

$(grep -o "ha" %p | wc -l) - ऊपर के रूप में काम करता है

| sh - से आउटपुट -printf (जो कमांड हैं) को एक शेल में पाइप किया जाता है और निष्पादित किया जाता है

ध्यान दें कि फ़ाइल नाम के अनुसार प्रिंटफ़ को एक बार लागू किया जाता है।


कैसे के बारे में अगर मैं प्रत्येक व्यक्तिगत फ़ाइल में होने वाली घटनाओं की संख्या का पता लगाना चाहता हूं
aceminer

दोस्तों, क्या कुछ कारण है कि आप grep की सुविधाओं का उपयोग क्यों नहीं कर सकते हैं? grep -H -c ip6 * मुझे लगता है कि क्या अनुरोध किया गया है
Gombai Sándor

@ GombaiSándor: -H फिल्माते हैं लेकिन -c विकल्प अभी भी प्रति पंक्ति केवल एक मैच पाता है। ओपी सभी चाहते हैं
flyingfinger

3

के बजाय का उपयोग करने का grep, उपयोग का प्रयास करें ag -c ha SilverSearcher :

1.txt:3
2.txt:1

यह अधिक तेज है! यदि आप ubuntu का उपयोग कर रहे हैं, तो आप पैकेज स्थापित कर सकते हैं silversearcher-ag

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.