テキストファイルでnの最も一般的な単語を見つけたいのですが、次の条件があります。
cat
ファイルを取得します。grep .
単語を取得します。tr -d '/r'
新しい行を削除します。コードの後半を|sort | uniq -c | sort -nr| head -10
で動作させることができました。
grep
の使用についておっしゃっていますが、最も頻繁に使用される単語を見つけることが目標である場合、その必要性はあまりわかりません。多くの場合、テキストファイルを単語に分割してから、| sort | uniq -c | sort -nr | head -10
パイプラインを実行します。
すぐに頭に浮かぶ解決策(間違いなく多くの代替解決策があります)は、sed
を介して正規表現を使用することです。
sed 's/\s/\n/g'
これは、すべての空白文字(\s
)を単一の改行(\n
)に置き換えることを示しています。一緒に組み合わせると、あなたのソリューションは次のようになると思います。
cat [file] | sed 's/\s/\n/g' | sort | uniq -c | sort -nr | head -10 | awk '{print $2}'
最後のawk '{print $2}'
に追加して、単語のみを表示します(カウントは表示しません)が、これはスクリプトの目的に完全に依存します。
これは宿題のように聞こえます。
cat
、grep
、およびtr
のすべての要件に従い、大文字と小文字(HE = He = he = hE)、および句読点で終わる単語(HE = He = he = hE)に一致します。 he。= he = he、= he!):
for Word in $(
cat derp.txt | \
tr '[:upper:]' '[:lower:]' | \
tr -d '[:punct:]' | \
tr -d '/r'
)
do
words[$Word]=$(cat derp.txt | grep -c $Word)
echo "${words[$Word]} $Word" # lots of duplicate output that's filtered out below.
done | sort -u | tail -n 10
grep .
すべてに一致するので、タイプミスですか?
tr -d '\r'
は、このコンテキストでは無意味です。IFS
ループの入力フィールドセパレータfor
は、空白と改行の両方を区切り文字として扱うためです。
Jason KLaiのソリューションがおそらく最良です。