探したいNテキストファイルで最も一般的な単語ですが、次の条件があります。
cat
ファイルを入手してください。grep .
言葉を入手してください。tr -d '/r'
新しい行を削除します。
私はコードの後半に取り組むことができました|sort | uniq -c | sort -nr| head -10
。
答え1
を使うと言われましたが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}'
(数字の代わりに)単語だけを表示するために最後に追加しましたが、これはすべてスクリプトの目的によって異なります。
答え2
これは宿題のように聞こえます。
cat
大文字と小文字(HE = He = he = hE)と句読点で終わる単語(he. = he = he、= he!)の一致grep
に関するすべての要件に従います。tr
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 K Laiのソリューションはおそらく最高です。