2013-08-20 49 views
0

我想要做一个循环,将采取我的输入文件的10行并将其输出到输出文件。并继续向输出文件添加行,而不是写入输出文件。一次处理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行数据到输出文件

+0

只是要清楚,这不是一线bash。这是一个执行大量外部命令的shell脚本。 – kojiro

+1

我不明白你在问什么 - 你想从你的样本数据中一次处理10行,还是你想一次缓冲10条流水线,只有当缓冲区写入文件时有10行吗? – kojiro

+0

感谢您的纠正,我想在时间 – iOSecure

回答

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,...又名你想跳过的行。此块领域保持的计数$ 4
  • FNR % 10 == 0块打印出该块和重置摘要(通过删除)次数
  • 我的脚本无法将字段进行排序,这样的顺序可能会有所不同。
  • 如果你想相符整个文件,而不仅仅是阻止10S,再用END替换FNR % 10 == 0
+0

谢谢你,那正是我一直在试图做 – iOSecure

+0

我得到这些错误,当我尝试运行它:awk的2script.awk AWK:CMD。行:1:意外的标记 – iOSecure

+1

你尝试过'awk -f 2script.awk'吗?不要忘记'-f'标志。 –