打印n行,然后在大文本文件中跳过n行

时间:2016-02-11 04:29:29

标签: bash sed

我想用sed打印n行,跳过n行,打印n行等直到文本文件的末尾,从某一行开始。例如,在第4行说明,打印5-9,跳过10-14,打印15-19等 从文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

我想要

5
6
7
8
9
15
16
17
18
19
25
26
27
28
29
35
36
37
38
39
etc

如果我尝试

sed -n '4~5p' FILE.txt > NEWFILE.txt 

会给我 4
9
14个
19个

我不想要。

4 个答案:

答案 0 :(得分:3)

我认为在sed中有一种简单的方法可以做到这一点,因为它不能算术。 awk更好:

awk 'NR%10 >= 5' FILE.txt > NEWFILE.txt

NR%10是模10的记录号(即行号的最后一位)。因此,这将打印行号的最后一位至少为5:5-9,15-19,25-29等的任何行。

答案 1 :(得分:2)

sed用于单个行上的简单替换,即全部。只需使用awk:

$ awk '!(NR%5){f=!f} f' file
5
6
7
8
9
15
16
17
18
19

答案 2 :(得分:2)

这是一个sed解决方案。试着搞清楚;)

sed -n 'n ; n ; n ; n ; n ; h ; n ; H ; n ; H ; n ; H ; n ; H ; x ; p' file

答案 3 :(得分:2)

这可能适合你(GNU sed):

sed -n '5~10,+4p' file

使用第一个地址从第5行开始经过10行而第二个地址在第一个地址之后的4行的范围。 有关详细信息,请参阅here

BTW sed -n '4~5p'没有给出你想到的答案。