ディレクトリ内の各ファイルについて最も一般的な単語を見つけて、次のように印刷する必要があります。
12 my /home/test/file1.txt
5 you /home/test/file3.txt
7 hello /home/test/file4.txt
私は試した:
for tmp in <path>
do
tr -c '[:alnum:]' '[\n*]' < "$tmp" | sort | uniq -c | sort -nr | head -1
done
これはうまくいきません
答え1
一致のみを印刷する文字列の一番上の単語を抽出するには、grep
withを使用します。-o
$ for file in *; do
printf '%s : %s\n' "$(grep -Eo '[[:alnum:]]+' "$file" | sort | uniq -c |
sort -rn | head -n1)" "$file"
done
8 no : file1
10 so : file2
12 in : file3
または、grep
これをサポートしていない場合は、すべてのスペースと句読点をに置き換えて、フィルタを使用して空白行をスキップして次のように計算-o
できます。tr
\n
grep .
$ for file in *; do
printf '%s : %s\n' "$(tr '[[:punct:]][[:space:]]' '\n' < "$file" | grep . |
sort | uniq -c | sort -rn | head -n1)" "$file"
done
8 no : file1
10 so : file2
12 in : file3