2017-02-07 2 views
1

同じ拡張子を持つディレクトリのすべてのファイルで再帰的に '['という文字を出現させたいのですか? * .c。私はUnixのSO Solarisと協力しています。複数のファイル内の出現回数を数えよう

このOSと私はコマンドgrep -o使用することはできませんから、私は他の記事に記載されているいくつかのソリューションを試みたが、作品だけはこの1つである:

xは、私が欲しいの発生である
sed 's/[^x]//g' filename | tr -d '012' | wc -c 

をカウントする。これは動作しますが、再帰的ではありません。再帰的にする方法はありますか?

+0

'filename'を' * '(現在のディレクトリ)に置き換えたり、'/dir/* 'を別のディレクトリ、' /dir1/*.txt/dir2/ *に置き換えることで再帰的にすることができます。 2つのディレクトリをスキャンします。あなたがすべてのディレクトリに対してrecursivellyを検索したいなら、 'find'を使って正しい方法です。 –

+0

ジョージさんありがとうございました、あなたはまったく正しいので、私は後者のオプションを欲しがりました。 – Vpdj

答えて

1

findから再帰的なリストを取得し、-exec引数でコマンドを実行できます。

私のようなことをお勧めしたい:

find . -name '*.c' -exec cat {} \; | tr -c -d ']' | wc -c 

trから-c引数が与えられた文字列の反対を使用することを意味します - すなわち、この場合には、すべてのものしかし]に一致します。

findコマンドの.は、現在のディレクトリで検索することを意味しますが、他のディレクトリ名も指定できます。

+0

このソリューションは完全に動作します、ありがとう! – Vpdj

0

あなたはnawkがインストールされていることを希望します。次に、あなただけのことができます:

nawk '{a+=gsub(/\]/,"x")}END{print a}' /path/* 
+0

nawkは私のOSでうまく動作しませんが、返信にはどうもありがとうございます! – Vpdj

0

スニペットコード自体を書くことができます。私は、あなたが次のことを実行することをお勧め:

awk '{for (i=1;i<=NF;i++) if ($i=="[") n++} END{print n}' *.c 

これは、現在のディレクトリ内のすべてのファイルに「[」を検索し、出現回数を出力します。

+0

私はこの解決策を試みましたが、この出来事が起こった場所のファイルの数を表示し、すべてのファイルに文字が何回出現するかを知りたいと思っています。 – Vpdj

+0

あなたは確かですか?私は同じコードを使っているので、ディレクトリに5つのファイルだけが含まれていても、私には10が表示されます。 –

+0

はい私はそのコードを、 ']'という文字が6回出現した1つのファイルで使用しました。そして、それは私に1を示しました。そして、同じ数の出現を持つ別のファイルを作成して2を示したので、キャラクターが少なくとも一回は登場しましたが、なぜ私たちが異なる解決策を持っているのか分かりません。何か間違ったことをしているかもしれません。 – Vpdj

関連する問題