これらの参照を含むファイルフォルダ内でファイル参照の数をどのように取得できますか?

これらの参照を含むファイルフォルダ内でファイル参照の数をどのように取得できますか?

まあ、2つのフォルダがあります。単純化のためにplayerssumと呼びますitems。 items フォルダーには各アイテムのファイルが含まれ、 people フォルダーには各人物のファイルが含まれ、その人物が所有する動物への参照が含まれます。これが私が今まで持っているものです:

ls -1 ~/items | cut -d. -f1 | grep -R -f - ~/player

私が得たgrep構文ここ。私はそれを言おうとしています:

electric: 8
laser: 7
loltrail: 2

-c代わりにフラグを追加して、grep次のようにします。

Bob.txt: 0
Cathy.txt: 0
John.txt: 0
Patrick.txt: 1

一人当たりの商品の数ではなく、商品の総数を取得するにはどうすればよいですか?

これは、どれだけのプロジェクトが使用されているかを把握することです。店舗をクリックGarry's Mod用のプラグイン。

答え1

GNUを使用して目的の結果を得る方法は次のとおりですawk

awk '
    BEGINFILE {
        if (FILENAME ~ "^animals/"  ||  FILENAME ~ "/animals/") {
                this_name = substr(FILENAME, index(FILENAME,"animals/")+length("animals/"))
                i = index(this_name, ".")
                if (i > 0) this_name = substr(this_name, 1, i-1)
                critter[++num] = this_name
                critter_count[num] = 0
                nextfile
        }
    }
    {
        for (i = 1; i <= num; i++) {
                if ($0 ~ critter[i]) critter_count[i]++
        }
    }
    END {
        for (i = 1; i <= num; i++) print critter[i] ": " critter_count[i]
    }
'  animals/*  people/*
  • 新しいファイル()を起動するときにBEGINFILE名前が、またはanimals/で始まることを確認してください/animals/。もしそうなら、animals/*./animals/*~/animals/*

    • 右部分文字列を抽出しますanimals/
    • 次に、1つを探し.、見つかったら、左側の部分文字列を抽出します。
    • この文字列(デフォルトのファイル名、削除されたディレクトリ、および拡張子)を配列critter[]に追加し、その文字列をcritter_count0に初期化します。

    ☛POSIX awkでは、およびはBEGINFILE使用nextfileできません。

  • そうでない場合(ファイルを見ている場合people)、動物名を繰り返してcritter一致する行数を数えます。
  • すべての入力に達した後、ENDファイル名から抽出された動物名animalsと各動物名がファイルに表示される頻度を報告しますpeople

これはディレクトリを再帰的に検索しませんpeople。質問に必要な説明は表示されません。

答え2

grepusingにパターンを入力すると、stdinすべてのパターンの結果がリンクされると思います。私が知っている限り、この問題を解決する唯一の方法は、各パターンに対して新しいgrepインスタンスを呼び出すことです。

このスクリプトはこの場合に機能します。

for animalName in $(ls -1 ~/animals | cut -d. -f1);
    do
        echo "$animalName: $(grep -R -h -c $animalName ~/people | paste -sd+ | bc)";
done

これは、試したマイナーな変更の一部と一致します。まず、-hオプションはgrepファイル名の印刷を無効にします。次に、を使用すると、grepパターンの出力は次のようになります。

1
0
3
2

私たちはこの数字をすべて追加したいと思います。pasteこのコマンドは行を a に連結+し、結果文字列を渡してbc結果を計算します。

注:動物名に改行や特殊文字(奇妙な場所)が含まれている場合は、解析をお勧めしませんls

関連情報