免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
1234下一页
最近访问板块 发新帖
查看: 2592 | 回复: 32

[文本处理] (因没找到理想的命令)重新求助,提取与b中相同的a中的行 [复制链接]

论坛徽章:
31
程序设计版块每日发帖之星
日期:2016-02-06 06:20:00程序设计版块每日发帖之星
日期:2016-07-20 06:20:00程序设计版块每日发帖之星
日期:2016-07-26 06:20:00每日论坛发贴之星
日期:2016-07-26 06:20:00程序设计版块每日发帖之星
日期:2016-07-27 06:20:00每日论坛发贴之星
日期:2016-07-27 06:20:00程序设计版块每日发帖之星
日期:2016-07-28 06:20:00程序设计版块每日发帖之星
日期:2016-07-29 06:20:00程序设计版块每日发帖之星
日期:2016-08-02 06:20:00程序设计版块每日发帖之星
日期:2016-08-06 06:20:00程序设计版块每日发帖之星
日期:2016-08-08 06:20:00程序设计版块每日发帖之星
日期:2016-08-09 06:20:00
发表于 2016-12-28 10:14 |显示全部楼层


要求:忽略大小写的差异提取与b中相同的a中的行

a.txt
a
A
abc
ABC
abC

b.txt
abc

输出结果:
abc
ABC
abC


请尽量考虑下效率(a稍大300M左右,b稍小100M左右,吃内存4、5GB即可)。

潜水的大牛帮帮我吧,请出手!盼望着





论坛徽章:
54
2015亚冠之德黑兰石油
日期:2015-07-07 13:00:1615-16赛季CBA联赛之深圳
日期:2016-03-31 09:03:5415-16赛季CBA联赛之辽宁
日期:2016-05-09 20:38:15程序设计版块每日发帖之星
日期:2016-05-12 06:20:0015-16赛季CBA联赛之四川
日期:2016-05-13 15:19:4715-16赛季CBA联赛之福建
日期:2016-05-15 20:24:34每日论坛发贴之星
日期:2016-05-16 06:20:0015-16赛季CBA联赛之吉林
日期:2016-05-26 11:49:4715-16赛季CBA联赛之广东
日期:2016-05-26 13:49:18极客徽章
日期:2016-12-07 14:05:2315-16赛季CBA联赛之广夏
日期:2016-12-20 17:33:532017金鸡报晓
日期:2017-01-10 15:19:56
发表于 2016-12-28 10:27 |显示全部楼层
  1. grep -if b a
复制代码

论坛徽章:
31
程序设计版块每日发帖之星
日期:2016-02-06 06:20:00程序设计版块每日发帖之星
日期:2016-07-20 06:20:00程序设计版块每日发帖之星
日期:2016-07-26 06:20:00每日论坛发贴之星
日期:2016-07-26 06:20:00程序设计版块每日发帖之星
日期:2016-07-27 06:20:00每日论坛发贴之星
日期:2016-07-27 06:20:00程序设计版块每日发帖之星
日期:2016-07-28 06:20:00程序设计版块每日发帖之星
日期:2016-07-29 06:20:00程序设计版块每日发帖之星
日期:2016-08-02 06:20:00程序设计版块每日发帖之星
日期:2016-08-06 06:20:00程序设计版块每日发帖之星
日期:2016-08-08 06:20:00程序设计版块每日发帖之星
日期:2016-08-09 06:20:00
发表于 2016-12-28 10:41 |显示全部楼层
回复 2# haooooaaa



请再帮我弄弄

提取b与a相同的a中的行。不是部分匹配


论坛徽章:
29
程序设计版块每日发帖之星
日期:2016-02-29 06:20:0015-16赛季CBA联赛之天津
日期:2016-08-10 10:33:1115-16赛季CBA联赛之深圳
日期:2016-08-17 15:07:2015-16赛季CBA联赛之佛山
日期:2016-11-07 11:33:5015-16赛季CBA联赛之广夏
日期:2016-11-15 09:13:31CU十四周年纪念徽章
日期:2016-11-24 14:12:25极客徽章
日期:2016-12-07 14:03:4015-16赛季CBA联赛之深圳
日期:2016-12-07 17:15:2715-16赛季CBA联赛之北京
日期:2016-12-22 09:30:0115-16赛季CBA联赛之深圳
日期:2016-12-22 10:49:2115-16赛季CBA联赛之山西
日期:2017-02-10 09:05:3215-16赛季CBA联赛之同曦
日期:2017-02-27 14:19:08
发表于 2016-12-28 11:15 |显示全部楼层
文件放百度网盘共享出来看看

论坛徽章:
28
15-16赛季CBA联赛之八一
日期:2016-02-22 19:10:4215-16赛季CBA联赛之深圳
日期:2016-12-01 10:34:0415-16赛季CBA联赛之新疆
日期:2016-12-07 10:24:2915-16赛季CBA联赛之同曦
日期:2016-12-15 12:06:43CU十四周年纪念徽章
日期:2016-12-18 13:03:4415-16赛季CBA联赛之吉林
日期:2017-01-03 15:52:2515-16赛季CBA联赛之辽宁
日期:2017-01-04 14:58:2415-16赛季CBA联赛之辽宁
日期:2017-01-15 09:42:512016科比退役纪念章
日期:2017-02-06 17:21:50黑曼巴
日期:2017-02-10 15:46:1215-16赛季CBA联赛之上海
日期:2017-03-18 10:14:5415-16赛季CBA联赛之青岛
日期:2017-03-18 22:00:44
发表于 2016-12-28 11:22 |显示全部楼层

  1. awk 'NR==FNR{a[$0];next}{for(i in a)if($0==i)print}' IGNORECASE=1 b.txt a.txt
复制代码

?

论坛徽章:
31
程序设计版块每日发帖之星
日期:2016-02-06 06:20:00程序设计版块每日发帖之星
日期:2016-07-20 06:20:00程序设计版块每日发帖之星
日期:2016-07-26 06:20:00每日论坛发贴之星
日期:2016-07-26 06:20:00程序设计版块每日发帖之星
日期:2016-07-27 06:20:00每日论坛发贴之星
日期:2016-07-27 06:20:00程序设计版块每日发帖之星
日期:2016-07-28 06:20:00程序设计版块每日发帖之星
日期:2016-07-29 06:20:00程序设计版块每日发帖之星
日期:2016-08-02 06:20:00程序设计版块每日发帖之星
日期:2016-08-06 06:20:00程序设计版块每日发帖之星
日期:2016-08-08 06:20:00程序设计版块每日发帖之星
日期:2016-08-09 06:20:00
发表于 2016-12-28 11:30 |显示全部楼层
本帖最后由 bmne 于 2016-12-28 11:33 编辑

回复 4# elu_ligao

你太忙了,真不忍心打扰你。不用测试了,太耽误时间。我自己试试即可你若恰巧有点时间,请你随便给我写个命令即可,知道你厉害,肯定考虑的全面

说个题外话
举例:
ab两个数据混合,结果如下
a大b小顺序,ab混合
awk 'NR==FNR{a=a?a "\n" $0:$0;next}{i=a;gsub("^|\n","&"$0,a);print a;a=i}' b.txt a.txt
a小b大顺序,ab混合
awk 'NR==FNR{a[$1]=$1}NR>FNR{for(i in a) {print a$1}}'  a.txt b.txt
实战中,只有这样才可以。唯一
反之,绝对不行。要么吃净内存,要么耗时太长
通过举这个例子,你肯定明白我的意思



论坛徽章:
31
程序设计版块每日发帖之星
日期:2016-02-06 06:20:00程序设计版块每日发帖之星
日期:2016-07-20 06:20:00程序设计版块每日发帖之星
日期:2016-07-26 06:20:00每日论坛发贴之星
日期:2016-07-26 06:20:00程序设计版块每日发帖之星
日期:2016-07-27 06:20:00每日论坛发贴之星
日期:2016-07-27 06:20:00程序设计版块每日发帖之星
日期:2016-07-28 06:20:00程序设计版块每日发帖之星
日期:2016-07-29 06:20:00程序设计版块每日发帖之星
日期:2016-08-02 06:20:00程序设计版块每日发帖之星
日期:2016-08-06 06:20:00程序设计版块每日发帖之星
日期:2016-08-08 06:20:00程序设计版块每日发帖之星
日期:2016-08-09 06:20:00
发表于 2016-12-28 11:30 |显示全部楼层
本帖最后由 bmne 于 2016-12-28 11:34 编辑

回复 4# elu_ligao

你太忙了,真不忍心打扰你。不用测试了,太耽误时间。我自己试试即可你若恰巧有点时间,请你随便给我写个命令即可,知道你厉害,肯定考虑的全面

说个题外话
举例:
ab两个数据混合,结果如下
a大b小顺序,ab混合
awk 'NR==FNR{a=a?a "\n" $0:$0;next}{i=a;gsub("^|\n","&"$0,a);print a;a=i}' b.txt a.txt
a小b大顺序,ab混合
awk 'NR==FNR{a[$1]=$1}NR>FNR{for(i in a) {print a$1}}'  a.txt b.txt
实战中,只有这样才可以。唯一
反之,绝对不行。要么吃净内存,要么耗时太长
通过举这个例子,你肯定明白我的意思



论坛徽章:
31
程序设计版块每日发帖之星
日期:2016-02-06 06:20:00程序设计版块每日发帖之星
日期:2016-07-20 06:20:00程序设计版块每日发帖之星
日期:2016-07-26 06:20:00每日论坛发贴之星
日期:2016-07-26 06:20:00程序设计版块每日发帖之星
日期:2016-07-27 06:20:00每日论坛发贴之星
日期:2016-07-27 06:20:00程序设计版块每日发帖之星
日期:2016-07-28 06:20:00程序设计版块每日发帖之星
日期:2016-07-29 06:20:00程序设计版块每日发帖之星
日期:2016-08-02 06:20:00程序设计版块每日发帖之星
日期:2016-08-06 06:20:00程序设计版块每日发帖之星
日期:2016-08-08 06:20:00程序设计版块每日发帖之星
日期:2016-08-09 06:20:00
发表于 2016-12-28 11:39 |显示全部楼层
回复 4# elu_ligao

你太忙,不麻烦你测试了,你若有点时间,随便个命令,足够我用的,你考虑周全


举例:
ab两个数据混合,结果如下
a大b小顺序,ab混合
awk 'NR==FNR{a=a?a "\n" $0:$0;next}{i=a;gsub("^|\n","&"$0,a);print a;a=i}' b.txt a.txt
a小b大顺序,ab混合
awk 'NR==FNR{a[$1]=$1}NR>FNR{for(i in a) {print a$1}}'  a.txt b.txt
实战中,只有这样才可以。唯一选择
反之,绝对不行。要么吃净内存、要么时间太长
通过举这个例子,你肯定明白意思



论坛徽章:
31
程序设计版块每日发帖之星
日期:2016-02-06 06:20:00程序设计版块每日发帖之星
日期:2016-07-20 06:20:00程序设计版块每日发帖之星
日期:2016-07-26 06:20:00每日论坛发贴之星
日期:2016-07-26 06:20:00程序设计版块每日发帖之星
日期:2016-07-27 06:20:00每日论坛发贴之星
日期:2016-07-27 06:20:00程序设计版块每日发帖之星
日期:2016-07-28 06:20:00程序设计版块每日发帖之星
日期:2016-07-29 06:20:00程序设计版块每日发帖之星
日期:2016-08-02 06:20:00程序设计版块每日发帖之星
日期:2016-08-06 06:20:00程序设计版块每日发帖之星
日期:2016-08-08 06:20:00程序设计版块每日发帖之星
日期:2016-08-09 06:20:00
发表于 2016-12-28 11:41 |显示全部楼层
回复 4# elu_ligao

你太忙,不麻烦你测试了,你若有点时间,随便个命令,足够我用的,你考虑周全


举例:
ab两个数据混合,结果如下
a大b小顺序,ab混合
awk 'NR==FNR{a=a?a "\n" $0:$0;next}{i=a;gsub("^|\n","&"$0,a);print a;a=i}' b.txt a.txt
a小b大顺序,ab混合
awk 'NR==FNR{a[$1]=$1}NR>FNR{for(i in a) {print a$1}}'  a.txt b.txt
实战中,只有这样才可以。唯一选择
反之,绝对不行。要么吃净内存、要么时间太长
通过举这个例子,你肯定明白意思



论坛徽章:
29
程序设计版块每日发帖之星
日期:2016-02-29 06:20:0015-16赛季CBA联赛之天津
日期:2016-08-10 10:33:1115-16赛季CBA联赛之深圳
日期:2016-08-17 15:07:2015-16赛季CBA联赛之佛山
日期:2016-11-07 11:33:5015-16赛季CBA联赛之广夏
日期:2016-11-15 09:13:31CU十四周年纪念徽章
日期:2016-11-24 14:12:25极客徽章
日期:2016-12-07 14:03:4015-16赛季CBA联赛之深圳
日期:2016-12-07 17:15:2715-16赛季CBA联赛之北京
日期:2016-12-22 09:30:0115-16赛季CBA联赛之深圳
日期:2016-12-22 10:49:2115-16赛季CBA联赛之山西
日期:2017-02-10 09:05:3215-16赛季CBA联赛之同曦
日期:2017-02-27 14:19:08
发表于 2016-12-28 11:54 |显示全部楼层
1、首先你有问题既然在坛子上发了, 就别管别人怎么样, 别人有时间有能力自然会回答和交流你的问题, 没有时间也别强求
2、先不管你这个问题和你1楼的问题有没有关系, 这里的代码你自己要先能看懂
3、awk 是怎么样输出或者它的输出原理是怎么样的我没有深究过, 但是你这里既然说了吃内存, 就肯定和你两个文件的大小有关系, 你要知道你的输出是一个什么样的结果:
     假设 a 有10行, b 有1000 行, 你这两个命令的结果输出应该都是10*1000=10000行, 所以, 如果你的文件一个1G, 另外一个10byte, 结果应该会有10G, 如果我没有错的话,
     而awk 的输出好像是先放在内存中的, 这样你就会有10G 的内存会被awk 占用, 所以吃内存, 这是我的理解, 当然, 未必正确, 希望指出
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP