我想用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个
我不想要。
答案 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'
没有给出你想到的答案。