免费注册 查看新帖 |

Chinaunix

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

这几行代码怎么优化下呢? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-09-08 10:50 |只看该作者 |倒序浏览
本帖最后由 noexcuse 于 2010-09-09 11:49 编辑

我截取了一小段代码的一部分,但我想可以看出个大概。就是一行行读一个文件,如果某行类似WaferID "lotid" 则取出这个lotid
我发现对于几千行的文件,它就会运行好久,实在不太能让人接受。
基本功能:
1 文件中只有一行WaferID "abc" 简单处理
2 文件中有多行WaferID "abc" 逐行处理
3 把文件中的一些信息取出,并写入一个output文件中

这一行wafer_tmp="$(echo $line | grep WaferID|awk -F'"' '{print $2}')"变成 wafer_tmp="$(echo $line | awk -F'"' '$1 ~ /^WaferID / {print $2}')"应该会好些。但还是超级慢。
谁可以帮忙给个思路给改进下么?
多谢

论坛徽章:
0
2 [报告]
发表于 2010-09-08 11:03 |只看该作者
给点数据

论坛徽章:
0
3 [报告]
发表于 2010-09-08 11:04 |只看该作者
文件是啥样 目的是啥?
把整个改成awk可否?

论坛徽章:
0
4 [报告]
发表于 2010-09-08 11:08 |只看该作者
  1. FileVersion 1 2;
  2. FileTimestamp 05-12-10 19:19:12;
  3. TiffSpec 6.0 R NA;
  4. InspectionStationID  "2830" "MFBF06";
  5. SampleType WAFER;
  6. ResultTimestamp 05-12-10 13:14:49;
  7. LotID "abc";
  8. SampleSize 1 300;
  9. SetupID "S5VL3MSX" 01-21-10 18:04:41;
  10. StepID "HK210800";
  11. SampleOrientationMarkType NOTCH;
  12. OrientationMarkLocation DOWN;
  13. DiePitch 2.460816e+04 3.224021e+04;
  14. DieOrigin 0 0;
  15. WaferID "07";
  16. Slot 7;
  17. SampleCenterLocation 1.228312e+04 1.080817e+04;
  18. ClassLookup 256
  19. 0 "0"
  20. 1 "xx"
  21. 。。

复制代码
数据就类似上面这样

整个改成awk不太好,这只是shell代码的一小部分。
文件是一些测试数据文件

论坛徽章:
0
5 [报告]
发表于 2010-09-08 11:23 |只看该作者
回复 1# noexcuse


    如果数据量不是很大,很慢的话恐怕不是改1,2句能改变的。。
  wafer_tmp="$(echo $line | grep WaferID|awk -F'"' '{print $2}')"
   这行能改成wafer_tmp="$(echo $line |awk -F'[ "]+' '/WaferID/{print $2}')"

论坛徽章:
0
6 [报告]
发表于 2010-09-08 11:29 |只看该作者
回复  noexcuse


    如果数据量不是很大,很慢的话恐怕不是改1,2句能改变的。。
  wafer_tmp="$(ec ...
好看的附件 发表于 2010-09-08 11:23



一个31400行的文件,竟跑了12分钟 我的天。
是的,不是改一行的问题,不过我就看出来这一行需要改进
别的就看不出来了

少用管道
多用内部函数
读文件用我现在的方式
这都是比较好的优化shell的方法,但似乎在我的代码里有哪一行是个瓶颈。

论坛徽章:
0
7 [报告]
发表于 2010-09-08 14:56 |只看该作者
没人可以帮我么。。。 唉
大家写的shell是不是运行的都很快啊,我发现还是perl对文件的处理更强,它的速度和代码的清晰度都要好不少

论坛徽章:
0
8 [报告]
发表于 2010-09-08 15:04 |只看该作者
回复 7# noexcuse


    你用c写更快,你一直说慢,就给几行代码,谁也不知道哪里慢。。

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
9 [报告]
发表于 2010-09-08 15:08 |只看该作者
回复 6# noexcuse
  1. bash -vx ./test.sh
复制代码
看看到底哪里是瓶颈

论坛徽章:
0
10 [报告]
发表于 2010-09-08 15:16 |只看该作者
回复  noexcuse


    你用c写更快,你一直说慢,就给几行代码,谁也不知道哪里慢。。
好看的附件 发表于 2010-09-08 15:04



    ok 全部贴出来了 多谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP