免费注册 查看新帖 |

Chinaunix

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

[文本处理] 帮忙写一个查找特定字符串的脚本 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-07-19 08:46 |只看该作者 |倒序浏览
我有文件1,有400MBytes,很大,里面格式为时间在内容:
-----------文件1--------------
......
2012.07.08    this is an sample text
2012.06.04    find this string
2011.09.09    get this one
2001.10.18    thank you all
2001.06.14    find this string
2003.07.07    get this one
......
-------------------------

文件2里面存有我需要寻找的字符串,
-----------文件2-------------
find this string
get this one
-----------------------------

我需要一个脚本,能够从文件1里面取得所有文件2中有的字符串的行,也就是
$脚本 文件1 文件2
最后能得到结果
-----------结果-------------
2012.06.04    find this string
2011.09.09    get this one
2001.06.14    find this string
2003.07.07    get this one
----------------------------
不知道像awk适合处理这么大的文件不?或者有谁能用perl帮我写一个。谢谢大家了。

论坛徽章:
0
2 [报告]
发表于 2012-07-19 08:52 |只看该作者
  1. awk 'NR==FNR{array[$1]}NR>FNR{if(($2 in array)){print $0}}' f2 f1
复制代码

论坛徽章:
0
3 [报告]
发表于 2012-07-19 08:58 |只看该作者
  1. grep -f file2 file1
复制代码

论坛徽章:
0
4 [报告]
发表于 2012-07-19 09:07 |只看该作者
赶紧去试试,谢谢,等会反馈结果

论坛徽章:
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
5 [报告]
发表于 2012-07-19 09:20 |只看该作者
一条纯grep命令就行了,不用写脚本。:wink:

论坛徽章:
0
6 [报告]
发表于 2012-07-19 09:21 |只看该作者
还不行哦大家,grep的时候文件小是可以的,但是文件大了就显示“”grep: Invalid range end“。

论坛徽章:
0
7 [报告]
发表于 2012-07-19 09:24 |只看该作者
回复 2# dahaoshanhe

这条命令有个问题,
比如文件1中有相同的,比如
2012.03.05    find    this string
2012.08.09    find    not this string

而文件2中为:
find     this string
这样子它会把文件1两句都匹配到,其实第二句是不要的
   

论坛徽章:
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 [报告]
发表于 2012-07-19 09:26 |只看该作者
回复 7# andloani

   几百M,用grep没有问题的。

    那哪些行要,哪些行不要,这得弄清楚啊。

论坛徽章:
0
9 [报告]
发表于 2012-07-19 09:33 |只看该作者
回复 8# blackold


    弄明白了,是因为文件2中有一些字符包含”-“这个符号,grep会把它识别是为范围,怎么让它不识别"-"呢?

论坛徽章:
0
10 [报告]
发表于 2012-07-19 09:37 |只看该作者
回复 7# andloani
  1. awk 'NR==FNR{array[$1" "$2" "$3]}NR>FNR{if(($2" "$3" "$4 in array)){print $0}}' f2 f1
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP