linux 如何从文本文件中每隔n,n+1行抓取一行

trnvg8h3  于 2022-11-02  发布在  Linux
关注(0)|答案(3)|浏览(243)

我有一个巨大的文本文件,我需要抓住每n,n+1行在一个单独的文件。
我遇到了sed命令,但它只能帮助我从文本文件中抓取每第n行。例如:

**

$ sed -n '0~4p' somefile**

**```**

Any suggestions on grabbing n+1th line at the same time?

**

$ sed -n '0~4p'某个文件***"'**

k5hmc34c

k5hmc34c1#

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

sed -n '4~4,+1p' file

这将从第4行开始打印第4加1行。

dvtswwa3

dvtswwa32#

下面是一个可能的解决方案(假设这是所需的输出):

$ seq 20 | sed -n '0~4{N;p}'
4
5
8
9
12
13
16
17

根据N命令的手册:
在模式空间中添加一个新行,然后将下一行输入附加到模式空间中。如果没有更多的输入,sed将退出,不处理任何命令。当使用-z时,一个零字节(ascii 'NUL'字符)将被添加到行之间(而不是新行)。
如果20的输出也应该为上述输入的一部分,则可以用途:

seq 20 | sed -n '0~4{p;n;p}'

# alternative solution if ~ address range isn't supported

seq 20 | sed -n '1b; n;n;p;n;p'
bvhaajcl

bvhaajcl3#

sed~选项是非标准的,但可以用来做你想做的事情。但使用awk似乎更自然:

awk 'NR>1 && NR % n  < 2' n=5

(eg):

$ yes | nl | sed 20q |  awk 'NR>1 && NR % n  < 2' n=5
     5  y
     6  y
    10  y
    11  y
    15  y
    16  y
    20  y

相关问题