एक फ़ाइल के भीतर पाठ के डुप्लिकेट ब्लॉकों की पहचान करें


10

क्या फ़ाइल के भीतर डुप्लिकेट या ब्लॉक के डुप्लिकेट को पहचानने का एक सुविधाजनक तरीका है?

मैं कोड दोहराव की पहचान के लिए इसका उपयोग करना चाहता हूं। ऐसा लगता है कि इस क्षमता के साथ विशेष कार्यक्रम हैं लेकिन मैं इसमें शामिल नहीं होना चाहता हूं।

मुझे उम्मीद है कि वहाँ एक उपकरण के समान है जो कि "एक फ़ाइल के भीतर" एक प्रकार का अंतर कर सकता है। इससे भी बेहतर एक एकल फ़ाइल के भीतर होगा।


vimdiffयहाँ आपके लिए क्या नहीं है?
SLM

क्योंकि इसमें केवल एक फ़ाइल शामिल है। मैं नहीं जानता कि एक ही फाइल के अलग-अलग भागों पर vimdiff का उपयोग कैसे करें।
प्रिक्सोलिटिक

मैं देखता हूं, मुझे याद आया कि यह एक ही फाइल थी।
SLM

जवाबों:


13

यदि तुलना लाइन-बाय-लाइन स्वीकार्य है, तो निम्नलिखित बताएंगे कि कौन सी लाइनें फ़ाइल में दोहराई गई हैं textऔर कितनी बार दिखाई देती हैं:

sort text | uniq -c | grep -vE '^\s*1 '

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

$ cat text
alpha
beta
alpha
gamma
alpha
beta
$ sort text | uniq -c | grep -vE '^\s*1 '
      3 alpha
      2 beta

सामान्य यूनिक्स उपकरणों का उपयोग करके, इसे बढ़ाया जा सकता है, यह मानते हुए कि इनपुट परीक्षण प्रारूप पैरा-बाय-पैरा या वाक्य-दर-वाक्य तुलना के लिए बहुत जटिल नहीं है।

बार-बार परिच्छेद खोजना

मान लीजिए कि हमारी फ़ाइल textमें शामिल है:

This is a paragraph.

This is another
paragraph

This is
a paragraph.

Last sentence.

निम्न आदेश दिखाता है कि कौन से पैराग्राफ एक से अधिक बार दिखाई देते हैं:

$ awk -v RS=""  '{gsub(/\n/," "); print}' text | sort | uniq -c | grep -vE '^\s*1 '
      2 This is a paragraph.

यह awkपाठ को पैराग्राफ में विभाजित करने के लिए उपयोग करता है (रिक्त लाइनों द्वारा चित्रित) रिक्त स्थान के लिए नई कथानकों को परिवर्तित करता है और फिर डुप्लिकेट किए गए पैराग्राफ की गिनती के लिए सॉर्ट और अनइक करने के लिए आउटपुट, एक पैराग्राफ प्रति पैराग्राफ को पास करता है।

ऊपर परीक्षण किया गया था wtih GNU awk। अन्य के लिए awk, पैराग्राफ (रिकॉर्ड) सीमाओं के रूप में रिक्त लाइनों को परिभाषित करने की विधि भिन्न हो सकती है।


1
मैं एक समय में कई लाइनों के लिए upvote चाहता हूं।
3

1
पैराग्राफ के लिए @Praxeolitic अपडेट किया गया।
7:10 बजे जॉन 1024
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.