免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 7488 | 回复: 19
打印 上一主题 下一主题

awk 实现 grep -A3 -B3 的效果,文本10G行 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-03-23 10:12 |只看该作者 |倒序浏览
比如 grep -A3 -B3  B  text.txt

我自己的解法如下,但想集思广益下,应该有其他的思路, 并且,我这个方法,如果文本行数在 10G级别的话,那得耗费多少内存呀?

{ ra[NR]=$0}
/B/{ for(i=NR-3;i<=NR+3;i++){if(i>0)ln_pflag[i]=1} }
END { for(j=1;j<=NR;j++){ if(ln_pflag[j]==1)print ra[j] } }

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
2 [报告]
发表于 2011-03-23 10:24 |只看该作者
本帖最后由 yinyuemi 于 2011-03-23 23:24 编辑
  1. awk '{a[NR]=$0}/B/{for(i=NR-3;i<NR;i++)print a[i];print;for(j=1;j<=3;j++) {getline;print};exit}'
复制代码

论坛徽章:
1
摩羯座
日期:2014-12-29 15:59:36
3 [报告]
发表于 2011-03-23 10:29 |只看该作者
awk '/B/{for(i in a){print a[i]}for(i in a){getline;print}}{a[NR%3]=$0}'

前三行没顺序

论坛徽章:
1
摩羯座
日期:2014-12-29 15:59:36
4 [报告]
发表于 2011-03-23 10:31 |只看该作者
需要顺序的话 可以改改

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
5 [报告]
发表于 2011-03-23 10:35 |只看该作者
sed -n '
/B/ !{
H
x
s/^.*\n\(.*\n.*\n.*\)$/\1/
x}
/B/{
H
n
H
n
H
n
H
n
x
p
q}' file

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
6 [报告]
发表于 2011-03-23 12:31 |只看该作者
使用grep的参数--line-buffered,看看能不能加快速度~~

论坛徽章:
0
7 [报告]
发表于 2011-03-23 14:22 |只看该作者
本帖最后由 unixzhong 于 2011-03-23 14:24 编辑

回复 2# yinyuemi

你这个比我的简洁,

不过假如连续两行都有 B匹配命中
你这样,好像会重复打印部分行, 和 grep -A3 -B3 B 的效果还是有点不一样, 不知道我说清楚没有

不会sed,因为我记性差,同时学 sed 和 awk老是搞混语法,:)

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
8 [报告]
发表于 2011-03-23 14:41 |只看该作者
这个得先搞清楚grep -A -B。重叠时比较麻烦吧。

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
9 [报告]
发表于 2011-03-23 14:46 |只看该作者
回复 7# unixzhong


    可以举个例子么

论坛徽章:
0
10 [报告]
发表于 2011-03-23 15:39 |只看该作者
回复 8# blackold

黑哥:

我的代码已经可以处理 重叠的情况了,就是想看看有没有其他 思路,当然我希望是awk实现,我不懂sed,:(


yinyuemi:

1111
222
333
4444
5555
B
B
8888
9999
aaaaa
bbbbbb
ccccc
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP