使用sed提取一系列行,重叠

时间:2014-02-13 13:46:08

标签: macos bash unix sed awk

我有一个(虚拟)文件,如下所示:

header
1
2
3
4
5
6
7
8
9
10

我需要一个命令,它会给我不同的文件,这些文件由每四行提取的行组成,其中一行重叠。所以我会有这样的事情:

1
2
3
4

3
4
5
6

5
6
7
8

7
8
9
10

所以这就是我所得到的(不是很多,对不起):

尾巴-n + 2 | sed -n 1,4p> window1.txt

但是我不知道如何在所有文件上应用这个,并重叠。

提前致谢。

1 个答案:

答案 0 :(得分:2)

这可能对你有用(GNU sed和split):

sed -nr '1{N;N;N};:a;p;$q;s/^.*\n.*\n(.*\n.*)$/\1/;N;N;ba' file | split -dl4

编辑:

使这个可编程使用:

sed -nr ':a;$!{N;s/[^\n]+/&/4;Ta};p;$q;s/.*((\n[^\n]*){2})$/\1/;D' file | 
split -dl4 file-name-prefix

其中4是每个文件的数字行,2是重叠行数。

File-name-prefix是您选择的文件名,其中会附加数字(参见man split)。