2009-07-14 21 views
10

मैं फ़ाइलों के संग्रह से शब्दों का शब्दकोश बनाने की कोशिश कर रहा हूं। फ़ाइल में सभी शब्दों को प्रिंट करने का एक आसान तरीका है, प्रति पंक्ति एक?फ़ाइल से निकालें

+0

क्या आपको एक निश्चित प्रोग्रामिंग भाषा की आवश्यकता है? – mkmurray

+2

@mkmurray, "खोल", "स्क्रिप्टिंग" और "यूनिक्स" आमतौर पर मानक यूनिक्स बक्से - awk, grep, sed, perl, कट आदि पर उपलब्ध किसी भी उपकरण का अर्थ है। – paxdiablo

उत्तर

21

आप grep इस्तेमाल कर सकते हैं एक बार प्रत्येक शब्द, मामले को अनदेखा करते हुए, आपका उपयोग कर सकते हैं

  • -u केवल प्रत्येक शब्द जब शब्द
 
# if you only want each word once 
% grep -o -E '\w+' temp | sort -u -f 
adipiscing 
amet 
brown 
consectetur 
dog 
dolor 
elit 
example 
examples 
for 
fox 
ipsum 
jumped 
lazy 
Lorem 
over 
quick 
rather 
sit 
Some 
text 
than 
The 
use 
+0

धन्यवाद! मैं इसके लिए एक घंटे के लिए Google रहा हूँ। आश्चर्यजनक रूप से, "... दस्तावेज़ से" का उपयोग करके "...एक टेक्स्ट फ़ाइल से "मुझे यह प्रश्न पहले मैच के रूप में लाया – davka

+0

आप ----> grep -o -E '\ w +' testfile.txt | sort -u -f | tee 5.txt <---- फ़ाइल को –

+0

जैक यांग में आउटपुट करने के लिए: या केवल सामान्य खोल रीडायरेक्ट 'grep ... | sort -u -f> 5.txt' का उपयोग करें – rampion

3

एक अच्छी शुरुआत बस -u (uniquify) ध्वज के साथ तो, sed उपयोग करने के लिए नई-पंक्तियों के साथ सभी रिक्त स्थान को बदलने के लिए बाहर खाली लाइनें (फिर sed के साथ) पट्टी, sort, डुप्लिकेट को निकालने के इस उदाहरण में है:

$ echo "the quick brown dog and fox jumped 
over the lazy dog" | sed 's/ /\n/g' | sed '/^$/d' | sort -u 

and 
brown 
dog 
fox 
jumped 
lazy 
over 
quick 
the 

फिर आप विराम चिह्न और पसंद के बारे में चिंता करना शुरू कर सकते हैं।

3

संभालने सफेद रिक्ति द्वारा अलग किए शब्द

awk '{for(i=1;i<=NF;i++)print $i}' file 

या

tr ' ' "\n" < file 

आप विशिष्टता चाहते हैं:

awk '{for(i=1;i<=NF;i++)_[$i]++}END{for(i in _) print i}' file 

tr ' ' "\n" < file | sort -u 
कुछ हटा विराम चिह्न के साथ

। शब्द

  • -o के लिए

    • -E '\w+' खोजें केवल लाइन है कि
     
    % cat temp 
    Some examples use "The quick brown fox jumped over the lazy dog," 
    rather than "Lorem ipsum dolor sit amet, consectetur adipiscing elit" 
    for example text. 
    # if you don't care whether words repeat 
    % grep -o -E '\w+' temp 
    Some 
    examples 
    use 
    The 
    quick 
    brown 
    fox 
    jumped 
    over 
    the 
    lazy 
    dog 
    rather 
    than 
    Lorem 
    ipsum 
    dolor 
    sit 
    amet 
    consectetur 
    adipiscing 
    elit 
    for 
    example 
    text 
     
    

    से मेल खाता है के भाग प्रिंट आप केवल प्रिंट करना चाहते हैं:

    awk '{ 
        gsub(/["*^&()#@$,?~]/,"") 
        for(i=1;i<=NF;i++){ _[$i] } 
    } 
    END{ for(o in _){ print o } }' file 
    
  • 0

    Ken Church's "Unix(TM) for Poets" (PDF) वास्तव में आवेदन के इस प्रकार का वर्णन करता है की तुलना में एक बार

  • -f बताता sort मामले की अनदेखी करने के प्रिंट - निकालने शब्द पाठ फ़ाइलों से बाहर, छंटाई और उन्हें गिनना, आदि

  • 0

    tr कमांड यह कर सकता है ...

    tr [:blank:] '\n' < test.txt 
    

    यह टीआर प्रोग्राम को नई जगह के साथ सफेद स्थान को बदलने के लिए कहता है।

    tr [:blank:] '\n' <test.txt> result.txt 
    

    देखें here: उत्पादन stdout result.txt है, लेकिन यह एक और फ़ाइल पर पुनः निर्देशित किया जा सकता है,।

    संबंधित मुद्दे