6

次のような多言語の.txtファイルを含むサブフォルダー自体を含むフォルダーがあるとします。

But where is Esope the holly Bastard
But where is 생 지 옥 이 군
지 옥 이
지 옥
지
我 是 你 的 爸 爸 !
爸 爸 ! ! !
你 不 會 的 !

私はすでに1つのfile.txt内のスペースで区切られた単語の頻度を数える方法を知っています:

$ grep -o '\w*' myfile.txt | awk '{a[$1]++}END{for(k in a)print a[k],k}' | sort > myoutput.txt

エレガントを手に入れる:

1 생
1 군
1 Bastard
1 Esope
1 holly
1 the
1 不
1 我
1 是
1 會
2 이
2 But
2 is
2 where
2 你
2 的
3 옥
4 지
4 爸
5 !

フォルダーとそのサブフォルダー内の複数のファイルで機能するようにコードを変更するにはどうすればよいですか?すべて同様のパターン(少なくとも* .txt)を示しますか?

4

2 に答える 2

4

findそのためのコマンドを使用できます。このような:

find -iname '*.txt' -exec cat {} \; | grep -o '\w*' | awk '{a[$1]++}END{for(k in a)print a[k],k}' | sort 

-exec現在のディレクトリとそのサブディレクトリにあるすべての*.txtファイルをcatするオプションを使用しています。出力はgrep|awk|sortパイプにパイプされます。

于 2013-03-24T22:43:50.693 に答える
1

なぜ使用するのfindですか?

globを使用するだけで十分です。

awk '{a[$1]++}END{for(k in a)print a[k],k}' *.txt | sort > out.txt 

globstarまたは、再帰的なディレクトリ構造をサポートするには、オプションを有効にして次を使用する必要があります**

shopt -s nullglob
awk '{a[$1]++}END{for(k in a)print a[k],k}' *.txt | sort > out.txt 

微調整

(部分)のような、awkと同等のことを行うには、-wayを調べる必要があります。grep -o \w*/[[:alpha:]]+/

awk '/[[:alpha:]]+/{print $0}' *.txt
于 2014-01-27T12:13:49.423 に答える