免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: bmne
打印 上一主题 下一主题

[文本处理] 请帮助!a与b文档对比后,按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
11 [报告]
发表于 2017-09-19 18:42 |只看该作者
回复 10# william_djj


谢谢指导

我一直在等大牛出手中,估计只是人家可能太忙,没时间

请问牺牲时间,换回来占用小内存,别死机,用上8-12个小时运行结束也可。请问:可否行的通?有没有办法?


谢谢,添麻烦了



论坛徽章:
3
15-16赛季CBA联赛之八一
日期:2017-12-29 13:06:2315-16赛季CBA联赛之天津
日期:2018-08-08 17:39:4619周年集字徽章-年
日期:2019-12-25 22:50:31
12 [报告]
发表于 2017-09-19 22:49 来自手机 |只看该作者
完全没问题,有问题只是大脑有问题而已
有时候代码是死的,脑子懂转弯才是更重要,
使用一样代码,A君会受到硬件限制而不能达到目的,而B君也是用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
13 [报告]
发表于 2017-09-20 08:11 |只看该作者
回复 12# aaaa_123


说我傻、缺心眼,没问题,我很高兴。否则,我不会来这里的

你的办法还是牺牲时间,换来能运行

请问
你总不能让我把b文件手动一个一个切割,然后一个一个运行吧?(这样的话,可就真的傻掉了)

麻烦给出组合命令?

谢谢

论坛徽章:
3
15-16赛季CBA联赛之八一
日期:2017-12-29 13:06:2315-16赛季CBA联赛之天津
日期:2018-08-08 17:39:4619周年集字徽章-年
日期:2019-12-25 22:50:31
14 [报告]
发表于 2017-09-22 09:13 来自手机 |只看该作者
bmne 发表于 2017-09-20 08:11
回复 12# aaaa_123



几十g的东西
竟然不想花费时间 又想换来运行


论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
15 [报告]
发表于 2017-09-22 09:42 |只看该作者
回复 1# bmne

  1. 把b文件split成几个文件,大小由内存来决定
  2. 然后分别处理,类似如下

  3. seq 1000 > b.txt  # 与b文件一样
  4. split -b1000 -d b.txt s

  5. awk 'FNR==5' s* |sort -R > file.test # 与a文件一样
  6. ls
  7. b.txt  file.test  s00  s01  s02  s03

  8. 执行:

  9. #>res;
  10. #rm -f tmp;
  11. for file in s*;
  12.   do  
  13.      if [ -f 'tmp' ];
  14.      then
  15.         file_in="tmp" ;
  16.      else
  17.         file_in="file.test";
  18.      fi;
  19.      awk 'NR==FNR{a[$0]=FNR;b[FNR]=$0;next}{if($0 in a){c[$0]=a[$0]}else{print >"tmp"}}END{l=asort(c,d);for(i=1;i<=l;i++){print b[d[i]] >>"res"}}' $file $file_in;
  20.   done

  21. cat res
复制代码


论坛徽章:
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
16 [报告]
发表于 2017-09-22 13:39 |只看该作者
回复 14# aaaa_123


我上面说过多次的

可以用时间换来能够运行

比如:用时8-10个小时

论坛徽章:
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
17 [报告]
发表于 2017-09-22 13:42 |只看该作者
回复 15# yinyuemi



谢谢大牛帮助。牛气的大牛

你的帮助可能是最理想的命令

谢谢、谢谢





论坛徽章:
25
程序设计版块每日发帖之星
日期:2016-05-03 06:20:0015-16赛季CBA联赛之八一
日期:2018-07-05 10:34:09黑曼巴
日期:2018-07-06 15:19:5015-16赛季CBA联赛之佛山
日期:2018-08-03 13:19:3315-16赛季CBA联赛之山西
日期:2018-08-07 19:46:2315-16赛季CBA联赛之广夏
日期:2018-08-08 19:31:5015-16赛季CBA联赛之青岛
日期:2018-11-26 15:21:5015-16赛季CBA联赛之上海
日期:2018-12-11 09:45:3219周年集字徽章-年
日期:2020-04-18 23:54:5215-16赛季CBA联赛之深圳
日期:2020-04-19 21:40:19黑曼巴
日期:2022-04-03 17:55:1315-16赛季CBA联赛之八一
日期:2018-07-03 16:56:46
18 [报告]
发表于 2017-09-22 17:24 |只看该作者
回复 1# bmne


先用split命令按行拆分文件b.txt,如果按大小拆分可能会断行。-l5是按每个新文件5行来拆分。
  1. split -l5 -d b.txt x
复制代码


你可以多拆分出几个新文件,然后测试一下执行效率。假如拆分结果是3个新文件x00,x01,x02。
  1. awk 'function t(){if(a[$0]){print}};FILENAME==ARGV[1]{a[$0]++;next}FILENAME==ARGV[2]||FILENAME==ARGV[3]||FILENAME==ARGV[4]{t()}' a.txt x00 x01 x02
复制代码


论坛徽章:
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
19 [报告]
发表于 2017-09-22 17:37 |只看该作者
回复 18# wh7211



谢谢、谢谢

论坛徽章:
3
15-16赛季CBA联赛之八一
日期:2017-12-29 13:06:2315-16赛季CBA联赛之天津
日期:2018-08-08 17:39:4619周年集字徽章-年
日期:2019-12-25 22:50:31
20 [报告]
发表于 2017-09-22 17:52 |只看该作者
回复 15# yinyuemi

难道觉得这种逻辑 跑出来结果会对   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP