0

こんにちは、bash の初心者の質問です。複数のファイルを調べて、検索語を含む行を見つけ、このリスト内の一意の行数を数えてから、tex ファイルに出力したいと考えています。

  1. 入力ファイル名
  2. 使用された検索語
  3. 一意の行の数

そのため、ファイルに 10 個の一意の行がある検索用語「Stop_gained」を使用したファイル「Firstpredictoroutput.txt」の出力行の例は次のようになります。

Firstpredictoroutput.txt Stop_gained 10 

次を使用して、単一のファイルの一意の数を取得できます。

grep 'Search_term' inputfile.txt | uniq -c | wc -l | >>output.txt 

しかし、bash を使用してパイプラインにループを実装する方法については、まだ十分にわかっていません。入力ファイルはすべて *predictoroutput.txt で終わります

どんな助けでも大歓迎です。

前もって感謝します、

ルバル

4

3 に答える 3

0
q="search for this"
for f in *.txt; do echo "$f $q $(grep $q $f | uniq | wc -l)"; done > out.txt
于 2012-03-03T14:57:24.683 に答える
0

find を使用できます:

find . -type f -exec sh -c "grep 'Search_term' {} | uniq -c | wc -l >> output.txt" \;

奇妙なファイル名で問題が発生する可能性がありますが。たとえば、「.txt」ファイルのみを処理するなど、検索するオプションをさらに追加できます。

find . -type f -name "*.txt" -exec sh -c "grep 'Search_term' {} | uniq -c | wc -l >> output.txt" \;
于 2012-03-03T14:43:18.657 に答える
0

という関数を作成し、 と の2 つの引数を指定してをfun呼び出すことができます。funfilenamepattern

$ fun() { echo "$1 $2 `grep -c $2 $1`"; }
$ fun input.txt Stop_gained
input.txt Stop_gained 2
于 2012-03-03T14:28:42.470 に答える