6

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

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

例如,我有一个包含 1780000 行的文件。

对于每第 17800 行,我想打印第 17800 行加上之后的两行。

因此,如果我有一个包含 1780000 行的文件,并且它从 1 开始并以 1780000 结束,则会打印:

1
2
3
17800
17801
17802
35600
35601
35602
# ... and so on.

有谁知道如何使用 awk、sed 或其他 unix 命令每隔 n 个间隔获取一系列行?

4

2 回答 2

5

使用 GNU sed:

sed -n '0~17800{N;N;p}' input

意义,

For every 17800th line: 0~17800
  Read two lines: {N;N;
  And print these out: p}

我们还可以添加前三行:

sed -n -e '1,3p' -e '0~17800{N;N;p}' input

使用 awk,这会更简单:

awk 'NR%17800<3 || NR==3 {print}' input
于 2013-04-22T00:50:55.630 回答
2
$ cat file
1
2
3
4
5
6
7
8
9
10

$ awk '!(NR%3)' file
3
6
9

$ awk -v intvl=3 -v delta=2 '!(NR%intvl){print "-----"; c=delta} c&&c--' file
-----
3
4
-----
6
7
-----
9
10

$ awk -v intvl=4 -v delta=2 '!(NR%intvl){print "-----"; c=delta} c&&c--' file
-----
4
5
-----
8
9

$ awk -v intvl=4 -v delta=3 '!(NR%intvl){print "-----"; c=delta} c&&c--' file
-----
4
5
6
-----
8
9
10
于 2013-04-23T02:53:02.663 回答