加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

如何使用awk,sed或其他unix命令每隔n个间隔获取一行范围?

发布时间:2020-12-13 19:52:30 所属栏目:Linux 来源:网络整理
导读:我知道如何使用awk和sed获得一系列行. 我也知道如何使用awk和sed打印出每一行. 但是,我不知道如何将两者结合起来. 例如,我有一个1780000行的文件. 对于每17800行,我想打印第17800行以及之后的两行. 因此,如果我有一个1780000行的文件,它从1开始,结束于178000
我知道如何使用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个间隔获取一行范围?

解决方法

使用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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读