2012-01-29 12 views
7

का समन्वय मैं लिनक्स के लिए इसे लटकाने के लिए कुकबुक पढ़ रहा हूं। मैं इसके लिए बिल्कुल नया हूँ।टेक्स्ट

मैं पाठ के समन्वय नामक एक विषय में कैम हूं। अब मैं समझता हूं कि यह क्या है, लेकिन मैं tr, sort और uniq (यही वह है जो कुकबुक कहता है) का उपयोग करके आदेशों का अनुक्रम प्राप्त करने में सक्षम नहीं है जो समन्वय उत्पन्न करेगा।

क्या कोई मुझे बता सकता है कि बुनियादी समन्वय कैसे बनाया जाए? यानी प्रत्येक अद्वितीय शब्द के लिए शब्द आवृत्ति को क्रमबद्ध करें और प्रदर्शित करें।

कुकबुक में प्रस्तुत किया गया विचार सभी रिक्त स्थानों को न्यूलाइन अक्षरों में अनुवाद करने के लिए tr का उपयोग करने के लिए प्रस्तुत किया गया है ताकि प्रत्येक शब्द एक नई रेखा में जा सके, जिसे बाद में सॉर्टर में पास किया गया, और फिर -सी ध्वज के साथ uniq को पास कर दिया गया अद्वितीय शर्तों की गिनती करें।

हालांकि मैं सही पैरामीटर को समझने में सक्षम नहीं हूं। क्या कोई समझाता है कि प्रत्येक पैरामीटर क्या करता है?

मैंने इसके लिए बाहर जाना है लेकिन मैं अपनी समस्या का स्पष्ट रूप से परिभाषित उत्तर प्राप्त करने में सक्षम नहीं हूं।

किसी भी मदद की बहुत सराहना की है!

उत्तर

0
tr ' ' '\n' <input | sort | uniq -c 

यदि मैं आपकी टिप्पणी सही ढंग से समझता हूं, तो आप निर्देशिका में सभी फ़ाइलों पर सभी शब्दों को पूरा करना चाहते हैं। आपको लगता है कि इस तरह से कर सकते हैं:

find mydir -type f -exec cat {} + | tr ' ' '\n' | sort | uniq -c 

find रिकर्सिवली फ़ाइलों को अपने तर्कों से मेल के लिए mydir खोजेगा: -type f केवल करने के लिए यह बताता सामान्य फ़ाइलों को रखना है (जैसा कि निर्देशिका या कुछ अन्य प्रकार आप के लिए नहीं होना चाहिए करने का विरोध किया अभी तक चिंता करें), फिर findcat निष्पादित करेगा, इसे सभी फ़ाइल नामों को तर्क के रूप में दिया जाएगा; cat फाइलों को जोड़ता है, उनकी सभी सामग्री को प्रिंट करता है जैसे कि यह एक बड़ी फाइल थी। उस आउटपुट को वास्तव में समेकन की गणना करने के लिए उसी tr/sort/uniq पाइपलाइन के माध्यम से चला जाता है।

+0

मुझे अब (सचमुच) चलाना है, लेकिन अगर मैं वापस आऊंगा तो मैं समझाऊंगा कि कोई और नहीं करता है। इस बीच, मैन पेज पढ़ें। – Kevin

+0

बहुत बहुत धन्यवाद। यह काम करता है। मैं इसे बनाने और समझने की कोशिश करूंगा। –

+0

ठीक है। मैं समझ गया। एक सवाल हालांकि, क्या हम इसे एक ही निर्देशिका में कुछ फ़ाइलों की एक समन्वय बनाने के लिए बढ़ा सकते हैं? एक तरीका, इसके बारे में जाने के लिए फ़ाइल में "एलएस" के आउटपुट को स्टोर करना है और उसके बाद उस फ़ाइल की प्रत्येक पंक्ति एक फ़ाइल नाम है, उपरोक्त आदेश को "परिणाम" में उस फ़ाइल के समन्वय को जोड़ने के लिए चलाएं। फिर फिर से "परिणाम" पर एक समन्वय करें। यह काम कर रहा है, लेकिन क्या यह पूरा करने के लिए एक आसान, सुरुचिपूर्ण तरीका है? –

1

ऐसा करने के कई तरीके हैं, लेकिन यह मेरा समाधान है। यह आपके द्वारा उल्लेख किए गए विभिन्न आदेशों का उपयोग करता है, लेकिन, sed और अंतिम 'प्रकार के उपयोग के माध्यम से, यह अधिक वांछनीय आउटपुट उत्पन्न कर सकता है।

find . -type f -print0 | xargs -0 cat | sed 's/[[:punct:]]//g' | sed -r 's/\s+/\n/g' | sort | uniq -c | sort -n 

find . -type f -print0 रिकर्सिवली नीचे की ओर अपने मौजूदा निर्देशिका से सभी फ़ोल्डर और फ़ाइलें खोज करेंगे। -type f केवल फाइलें लौटाएंगे। -print0 फ़ाइल नामों को समाप्त करने के लिए विशेष \0 वर्ण का उपयोग करेगा ताकि रिक्त स्थान पाइप में अगले कमांड में भ्रमित न हों।

xargs इनपुट लेता है और इसे cat में कमांड के लिए तर्क में बदल देता है। cat तर्क के रूप में दिए गए सभी फ़ाइलों की सामग्री मुद्रित करेगा। -0 xargs को बताता है कि इसका इनपुट विशेष \0 वर्ण द्वारा सीमित है, रिक्त स्थान से नहीं।

sed एक पैटर्न-मिलान स्ट्रीम संपादक है। पहले sed कमांड सबसाइट्स (s) [[:punct:]] पैटर्न का उपयोग करके सभी विराम चिह्न और विराम चिह्न को कुछ भी नहीं बदलता है। यह प्रत्येक पंक्ति में दिए गए सभी पंक्तियों से मेल खाता है (g)।

दूसरा एसईडी आदेश एक पंक्ति (\s+) नई-पंक्तियों (\n) इनपुट स्ट्रिंग (g) के माध्यम से में में 1 या अधिक रिक्त स्थान की सभी आवृत्तियों बदल जाता है।

sort वर्णमाला शब्दों को व्यवस्थित करता है।

uniq -c आउटपुट सूची में आसन्न डुप्लीकेट को समाप्त करता है जबकि यह गणना करते हुए कि कितने थे।

sort -n इस आउटपुट को संख्यात्मक रूप से शब्द आवृत्ति द्वारा क्रमबद्ध शब्दों की एक सूची प्रदान करता है।

sed और xargs बहुत शक्तिशाली आदेश हैं, खासकर अगर संयोजन के रूप में उपयोग किया जाता है। लेकिन, जैसा कि एक और पोस्टर ने नोट किया है, find में लगभग असंबद्ध शक्ति भी है। tr उपयोगी है, लेकिन sed से अधिक विशिष्ट है।

+0

यह बहुत अच्छा है! बेहतर कार्यक्षमता के लिए धन्यवाद (दूसरे उत्तर पर)। –