2009-07-14 21 views
10

ファイルのコレクションから単語の辞書を作成しようとしています。 1行に1つずつファイル内のすべての単語を印刷する簡単な方法はありますか?この例のように、重複を除去する-u(uniquify)フラグと、その後ファイルから単語を抽出する

+0

特定のプログラミング言語が必要ですか? – mkmurray

+2

@mkmurray、 "shell"、 "scripting"、 "unix"は通常、UNIXの標準的なボックス(awk、grep、sed、perl、cutなど)で利用できるツールを意味します。 – paxdiablo

答えて

21

あなたはgrepを使用することができます一言一言、大文字小文字を無視して、並べ替え、テキストファイルから抽出した単語 -

  • は言葉だけ
 
# 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

ありがとう!私はこれのために1時間Googleをしてきました。不思議なことに、 "...の代わりに" ...ドキュメントから "...テキストファイルから "最初の一致としてこの質問を持ってきました – davka

+0

----> grep -o -E '\ w +' testfile.txt | sort -u -f | tee 5.txt <----ファイルを出力するには –

+0

jack yang:通常のシェルリダイレクト 'grep ... | sort -u -f> 5.txt'を使うだけです – rampion

3

良いスタート単に(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 

次に、句読点などについて心配することができます。削除いくつかの句読点と

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

tr ' ' "\n" < file | sort -u 

:あなたは一意たい場合は空白

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

または

tr ' ' "\n" < file 

で区切られた単語を想定し

3

。あなただけ印刷する場合のみ

 
% 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 
 

と一致する行の部分を印刷した単語

  • -oため

    • -E '\w+'検索:

      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プログラムに空白を新しい行に置き換えるように要求します。出力はstdoutですが、それは別のファイル、result.txtにリダイレクトすることができます

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

    hereを参照してください。

    関連する問題