我有一个由316125000行组成的大文件。该文件由112500个数据块组成,每个数据块有2810行。
我需要减小文件的大小,所以我想留下第1个,第10个,第20个,第112490个和第112450个数据块,并删除所有其他数据块。结果这将给我11250个数据块。
这意味着我想要删除每个2811~28100行,并留下每1~2810和28101~30910 ....行。
我在考虑awk,sed或grep,但哪一个更快,我怎么能实现这个?我知道如何使用awk和NR删除每一行或第三行,但我不知道如何重复删除大块行。
谢谢
最好,
答案 0 :(得分:5)
这些方面的某些内容可能有效:
echo '<form action="'.htmlspecialchars($_SERVER["PHP_SELF"]).'" method="post">';
echo '<input type="hidden" value="' . $input_process . '" name="delay"/>';
echo '<input type="submit" value="Activate" name="activate_button"/>';
echo '</form>';
也就是说,awk 'int((NR - 1) / 2810) % 10 == 0' <infile >outfile
给出当前行(int((NR - 1) / 2810)
)的2810行的块的(从零开始)数,并且如果该块号的剩余部分除以10为0 (NR
)打印该行。这应该导致每10个块被打印,包括第一个块(块号0)。
答案 1 :(得分:3)
我不认为哪个是最快的,但我可以为您的基准测试提供GNU sed配方:
sed -e '2811~28100,+25289d' <input >output
这说:从第2811行开始,之后每28100行,删除它和下一个25289行。
同样,我们可以使用sed -n
并每28100行打印1-2810行:
sed -ne '1~28100,+2809p' <input >output