如何每 y 行提取 x 行

How to extract x lines every y number of lines

我有一个大文件,我想从中每隔 y 行提取 x 行。我四处搜索并找到了一些关于如何打印第一个 z 行的答案,比如 tail -n +<lines to skip + 1> 我正在尝试将它与 sed 结合,但不知道如何。

要打印每行的前两行,请尝试:

awk -v x=2 -v y=10 '(NR - 1) % y < x'

例如:

$ seq 20 | awk -v x=2 -v y=10 '(NR - 1) % y < x'
1
2
11
12

工作原理

Awk 逐行读取输入。如果条件 (NR - 1) % y < x 为真,它将打印该行。 NR 是第一行从 1 开始的行号。

我喜欢 awk 的回答,但如果你必须使用 sed:

sed -n 'p;n;p;n;p;n;n;n'

这将写入 3,然后跳过 3。每个“'p'”写入当前行,然后“'n'”获取下一行。

我不推荐它用于 x 和 y 的高值,因为它会变长。