如何每 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 的高值,因为它会变长。
我有一个大文件,我想从中每隔 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 的高值,因为它会变长。