0

入力ファイルの10 行を取り、それを出力ファイルに出力するループを作成したいと思います。そして、上書きせずに出力ファイルに行を追加し続けます。

これはサンプルデータです:

FilePath    Filename    Probability ClassifierID    HectorFileType  LibmagicFileType

/mnt/Hector/Data/benign/binary/benign-pete/ 01d0cd964020a1f498c601f9801742c1    19  S040PDFv02  data.pdf    PDF document

/mnt/Hector/Data/benign/binary/benign-pete/ 0299a1771587043b232f760cbedbb5b7    0   S040PDFv02  data.pdf    PDF document

次に、これを使用して各一意のファイルをカウントし、各ファイルの数を表示します。

cut -f 4 input.txt|sort| uniq -c | awk '{print $2, $1}' | sed 1d

したがって、最終的には、bash のその行を実行し、一度に 10 行のデータを出力ファイルに出力できるループを作成する助けが必要です。

4

1 に答える 1

1

私が正しく理解している場合、10行のブロックごとに、次のことを試みています。

  1. ブロックの最初の行であるヘッダーをスキップします
  2. フィールド #4 (ClassifierID) が出現する回数をカウントし、フィールドとカウントを出力します。

これを行うAWKスクリプトは次のとおりです。

FNR % 10 != 1 {
    ++count[$4]
}

FNR % 10 == 0 {
    for (i in count) {
        print i, count[i]
        delete count[i]
    }
}

討論

  • ブロックはすべてのFNR % 10 != 1行を処理しますが、行 1、11、21、... AKA はスキップしたい行です。このブロックは、フィールド $4 のカウントを保持します
  • ブロックはそのFNR % 10 == 0ブロックの概要を出力し、(削除によって) カウントをリセットします。
  • 私のスクリプトはフィールドを並べ替えないため、順序が異なる場合があります。
  • 10 のブロックだけでなく、ファイル全体を集計する場合は、 に置き換えFNR % 10 == 0ますEND
于 2013-08-20T14:53:23.980 に答える