如何使用awk,sed或其他unix命令每隔n个间隔获取一行范围?

Jam*_*son 6 unix awk sed cat

我知道如何使用awk和sed获得一系列行.我也知道如何使用awk和sed打印出每一行.

但是,我不知道如何将两者结合起来.

例如,我有一个1780000行的文件.

对于每17800行,我想打印第17800行以及之后的两行.

因此,如果我有一个1780000行的文件,它从1开始,结束于1780000,这将打印:

1
2
3
17800
17801
17802
35600
35601
35602
# ... and so on.
Run Code Online (Sandbox Code Playgroud)

有没有人知道如何使用awk,sed或其他unix命令每隔n个间隔获取一行范围?

per*_*eal 5

使用 GNU sed:

sed -n '0~17800{N;N;p}' input
Run Code Online (Sandbox Code Playgroud)

意义,

For every 17800th line: 0~17800
  Read two lines: {N;N;
  And print these out: p}
Run Code Online (Sandbox Code Playgroud)

我们还可以添加前三行:

sed -n -e '1,3p' -e '0~17800{N;N;p}' input
Run Code Online (Sandbox Code Playgroud)

使用 awk,这会更简单:

awk 'NR%17800<3 || NR==3 {print}' input
Run Code Online (Sandbox Code Playgroud)

  • 使用 GNU sed 对“N”的数量进行“编程”的一种方法是“sed -n '0~17800{:a;N;s/\n//2;Ta;p}'”,您可以在其中替换`2` 由您需要的数字组成。 (4认同)