免费注册 查看新帖 |

Chinaunix

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

[文本处理] for循环生成文本效率太低怎么破? [复制链接]

论坛徽章:
1
程序设计版块每日发帖之星
日期:2016-05-04 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-05-04 14:05 |只看该作者 |倒序浏览
本帖最后由 vcuteym 于 2016-05-04 21:47 编辑

已知文件file1内容如下
-------------------------------------------------------------------------
3  5  6   11    2  4     7     12
------------------------------------------------------------------------
看下面的程序,主要是第三层循环的最大值ionmax通过a和file1决定,当第一层循环a=3时,ionmax=6(file1中的$3),以此类推。所以不好用AWK生成数组的命令。多层循环,每个循环都要cat或者echo到outfile一次,速度非常慢,怎么破?
--------------------------------------------------------------------------
amax=8
bmax=15
for((a=1;a<=amax;a++))
do
ionmax=$(awk 'NR==1 {print $'"$a"'}' file1)
   for((b=1;b<=bmax;b++))
   do
      for((ion=1;ion<=ionmax;ion++))
      do
cat >> outfile <<!
$a   $b   $ion  
!
      done
   done
done

增加了输出附件outfile

outfile.rar

1.11 KB, 下载次数: 5

论坛徽章:
1
程序设计版块每日发帖之星
日期:2016-05-04 06:20:00
2 [报告]
发表于 2016-05-04 21:01 |只看该作者
自己顶一下,请高手来解答!

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

是这个意思么?
    awk -vbmax=1500 '{for(amax=1;amax<=NF;amax++){for(b=1;b<=bmax;b++){for(ion=1;ion<=$amax;ion++){print amax,b,ion}}}}' file

论坛徽章:
1
程序设计版块每日发帖之星
日期:2016-05-04 06:20:00
4 [报告]
发表于 2016-05-04 21:24 |只看该作者
本帖最后由 vcuteym 于 2016-05-04 21:29 编辑

回复 3# yinyuemi


不是,注意看题

已知文件file1内容如下
-------------------------------------------------------------------------
3  5  6   11    2  4     7     12
------------------------------------------------------------------------
看下面的程序,主要是第三层循环的最大值ionmax通过a和file1决定,当第一层循环a=3时,ionmax=6(file1中的$3),以此类推。

ionmax通过这句来确定ionmax=$(awk 'NR==1 {print $'"$a"'}' file1)

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
5 [报告]
发表于 2016-05-04 21:31 |只看该作者
回复 4# vcuteym


    你连个输出是什么样的都不提供

论坛徽章:
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
6 [报告]
发表于 2016-05-04 21:34 |只看该作者

论坛徽章:
1
程序设计版块每日发帖之星
日期:2016-05-04 06:20:00
7 [报告]
发表于 2016-05-04 21:48 |只看该作者
回复 6# jason680

大神,没看明白和本题有什么联系,求明示


   

论坛徽章:
1
程序设计版块每日发帖之星
日期:2016-05-04 06:20:00
8 [报告]
发表于 2016-05-04 21:49 |只看该作者
回复 5# yinyuemi

在附件中增加了输出


   

论坛徽章:
1
程序设计版块每日发帖之星
日期:2016-05-04 06:20:00
9 [报告]
发表于 2016-05-04 21:50 |只看该作者
回复 6# jason680
最关键是我想不到用别的办法解决,只能想到用for循环实现。我题目的意思就是用其他方法解决这个问题,快一点。


   

论坛徽章:
4
程序设计版块每日发帖之星
日期:2015-10-14 06:20:00每日论坛发贴之星
日期:2015-10-14 06:20:00程序设计版块每日发帖之星
日期:2016-05-02 06:20:00程序设计版块每日发帖之星
日期:2016-05-08 06:20:00
10 [报告]
发表于 2016-05-04 21:55 |只看该作者
本帖最后由 mswsg 于 2016-05-05 08:59 编辑

就是3个列表:

a =[3,5,6,11,2,4,7,12]
b =[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
c= [1,2,3,4,5,6,7,8]
生成下面的组合:

c[1]b[1-15]a[1-3]
c[2]b[1-15]a[1-5]
c[3]b[1-15]a[1-6]
c[4]b[1-15]a[1-11]
c[5]b[1-15]a[1-2]
c[6]b[1-15]a[1-4]
c[7]b[1-15]a[1-7]
c[8]b[1-15]a[1-12]


c[1]b[1-15]a[1-3]的意思:
1 1 1
1 1 2
1 1 3
1 2 1
1 2 2
1 2 3
1 3 1
1 3 2
1 3 3
1 4 1
1 4 2
1 4 3
1 5 1
1 5 2
1 5 3
1 6 1
1 6 2
1 6 3
1 7 1
1 7 2
1 7 3
1 8 1
1 8 2
1 8 3
1 9 1
1 9 2
1 9 3
1 10 1
1 10 2
1 10 3
1 11 1
1 11 2
1 11 3
1 12 1
1 12 2
1 12 3
1 13 1
1 13 2
1 13 3
1 14 1
1 14 2
1 14 3
1 15 1
1 15 2
1 15 3
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP