免费注册 查看新帖 |

Chinaunix

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

[文本处理] 请给出a与b对比,效率稍高一点的 [复制链接]

论坛徽章:
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
发表于 2017-04-05 19:30 |显示全部楼层


有a、b两个文件  对比a文件只开头部分与b文件相同并提取该行

a.txt中
12345abc
67812345
b.txt
12345
提取结果
12345abc

awk 'NR==FNR{a[NR]=$0;next}{for(i in a){s=index(a[i],$0);if(s==1)print a[i]}}'  a  b

实战:
a.txt=1.35GB
b.txt=2.73MB
电脑内存=16GB
运行时间4个多小时后,还在运行中(吃内存15GB左右),没办法,只好手动停止运行


辛苦,谢谢!






论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
发表于 2017-04-05 22:34 |显示全部楼层
回复 1# bmne

1. a大b小 (a.txt=1.35GB,b.txt=2.73MB)
  先读b, 产生数组

2. 后读a
  再与数组比对(file b)

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
发表于 2017-04-06 07:03 |显示全部楼层
本帖最后由 jason680 于 2017-04-06 08:11 编辑

回复 1# bmne

实战:
a.txt=1.35GB
b.txt=2.73MB
电脑内存=16GB

a大 b小
1. 先读b, 建立数组
2. 后读a,  再与数组对比


----------------------------------------

$ ls -l a.txt b.txt
-rw-rw-r-- 1 jason jason 1388888898 Apr  6 07:13 a.txt
-rw-rw-r-- 1 jason jason    2615136 Apr  6 07:27 b.txt

$ wc -l a.txt b.txt
150000000 a.txt
    435555 b.txt
150435555 total


$ awk -f comp_ba.awk b.txt a.txt
Read b.txt ...
Read a.txt ...
  5.1% [==................................................] do nothing 01:49
^C


$ cat comp_ba.awk
BEGIN{
  _p["time_s"] = systime();
}

function bar(n, m, p,d,t,s, sec){
  if(_p["total"] == 0){
    print "didnot set total(_p[\"t\"]) value for bar function"
    exit 1
  }  
  t = _p["total"]
  p = n / t * 100
  d = int(p/2)
  s = sprintf("%5.1f%", p)
  s = s " ["
  for(n=1;n<=50;++n){
    s = s ((n <= d) ? "=" : ".")
  }
  s = s "]"
  if(m != ""){
    s = s " " m
  }
  sec = systime() - _p["time_s"]
  s= s sprintf(" %02d:%02d", int(sec/60), sec%60);
  printf("%s\r", s)

}
FNR==1{
  print " Read " FILENAME " ..."
}
FNR==NR{
  if(!a[$0]++){
    b[$0]=1
  }
  next;
}
FNR == 1{
  cmd="wc -l " FILENAME;
  cmd | getline line;
  _p["total"] = +line;

}
{
  if(FNR %100==0){
   bar(FNR, "do nothing")
  }
  # do something by yourself
  # note: compare string

}

论坛徽章:
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
发表于 2017-04-06 09:42 |显示全部楼层



谢谢出手



1.jpg

论坛徽章:
0
发表于 2017-04-06 10:28 |显示全部楼层
while read line
do
cat a.txt | grep ^$line
done < b.txt

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
发表于 2017-04-06 10:54 |显示全部楼层
回复 4# bmne

有中文(错误讯息) 还不懂?

论坛徽章:
0
发表于 2017-04-06 15:37 |显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
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
发表于 2017-04-06 17:10 |显示全部楼层
回复 7# 本友会机友会摄友会


你天天在捣鼓什么?本版块没见你一条命令,也没见你求助

我笨,难道你比我还笨?我不会但我是实实在在求助帮助

请你先写出条本版块的一条高效的命令我学习下,长长见识

别告诉我你忙,没工夫写



论坛徽章:
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
发表于 2017-04-06 17:44 |显示全部楼层
回复 5# CapsSpace


请帮助,实在是弄不明白
下面的简单a b 文档
用命令轻松输出
可是换成你的,始终输出是零
(依靠你这个grep效率高呢)
看截图

a.txt
12345abc
67812345

b.txt
12345

运行
while read line
do
cat a.txt | grep ^$line
done < b.txt
没有输出



1.jpg

论坛徽章:
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
发表于 2017-04-06 18:19 |显示全部楼层
回复 5# CapsSpace


测试好了

等等,我实战看看效率去


您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP