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 == 0END.
于 2013-08-20T14:53:23.980 回答