2017-10-18 21 views
0

ターミナルを使用してストップワード(「stopwords.txt」というリストから)を数えずに文章のテキスト「text.txt」の単語頻度をカウントします。単語egrepを使用したスト​​ップワードを使用しない頻度

cat text.txt | tr -sc 'A-Za-z' '\n' | tr 'A-Z' 'a-z' | egrep -vwFf stopwords.txt | sort | uniq -c 

なぜこれが機能しないのですか、どのような正しいスクリプトが必要ですか?

注:アウトプットは低周波から高周波数にソートする必要があります。あなたは一つのプロセスではなく、少ない効率的なパイプでこれを行うためにawkを使用して検討するかもしれない

+2

サンプル入力出力ファイル – 123

+0

私のコンピュータでは、 'egrep -vwFf'がエラーを返します:' grep:conflicting matchers specified'。 'F'フラグを単に削除するだけで、これは私のために修正されます。 – Aserre

+0

@Aserreは良い点です –

答えて

0

$ awk 'BEGIN{RS="[^[:alpha:]]"} 
    /^$/{next} 
    {word=tolower($1)} 
    FNR==NR {stop[word]; next} 
    word in stop {next} 
    {wc[word]++} 
    END{ for (e in wc) printf "%4d\t%s\n", wc[e], e } 
    ' stopwords words 

gawkこの場合のみ...)

POSIXのawkに:

$ awk 'BEGIN{FS="[^[:alpha:]]"} 
    {for (i=1; i<=NF; i++){ 
     word=tolower($i) 
     if (FNR==NR) 
      stop[word] 
     else if (word in stop || $i~/^$/) 
      continue 
     else 
      wc[word]++ 
     } 
    } 
    END{ for (e in wc) printf "%4d\t%s\n", wc[e], e } 
    ' stopwords words 

あなたの 'pipe'は| sort -n

sortを呼び出すことができます
+0

ありがとう!それは騒ぎの解決策になるだろう。パイプでやりたい –

関連する問題