[求助]用awk编写生成以下结构文件的程序

回复 收藏
用awk编写生成以下结构文件的程序。( 最后列使用现在的时间,时间格式为YYYYMMDDHHMISS)  各列的值应如下所示,每增加一行便加1,共500万行。

1,1,0000000001,0000000001,0000000001,0000000001,0000000001,0000000001,2005100110101
2,2,0000000002,0000000002,0000000002,0000000002,0000000002,0000000002,2005100110101
2013-07-15 17:32 举报
已邀请:
0

阿铭 管理员

赞同来自:

awk 没有研究透彻,所以只能用shell搞起。
  1. #! /bin/bash

  2. for i in `seq 1 5000000`; do
  3.     n=`echo "$i"|awk '{print length($0)}'`
  4.     export m=$[10-$n]
  5.     export o=`perl -e '$a='0'; $b=$a x $ENV{"m"}; print $b;'`
  6.     export j=$i
  7.     p=`perl -e '$c=$ENV{"o"}.$ENV{"j"}; print $c;'`
  8.     echo "$i,$i,$p,$p,$p,$p,$p,$p,`date +%Y%m%d%H%M%S`"
  9. done
其中用到了perl,所以脚本整体看起来比较啰嗦,希望能找到更好的解决办法。
PS: shell 执行效率很低,so 该脚本运行时间会很漫长!
0

liuwenqing

赞同来自:

阿铭 发表于 2013-7-15 17:34 static/image/common/back.gif
awk 没有研究透彻,所以只能用shell搞起。其中用到了perl,所以脚本整体看起来比较啰嗦,希望能找到更好的解 ...

谢谢您{:4_120:}
1

liuwenqing

赞同来自: loading丶

awk 'BEGIN{for(i=1;i<=10;i++)printf("%d,%d,%010d,%010d,%010d,%010d,%010d,%010d,%d\n",i,i,i,i,i,i,i,i,strftime("%Y%m%d%H%M"))}'
1

阿铭 管理员

赞同来自: loading丶

楼上的awk写得很棒! 赞一个!
0

liuwenqing

赞同来自:

阿铭 发表于 2013-7-17 11:38 static/image/common/back.gif
楼上的awk写得很棒! 赞一个!

这个也是请别人写的.自己又琢磨了一下.搞明白大概思路,留在这里.记录,交流之用
0

showstyle

赞同来自:

谢谢分享!
0

無名世界

赞同来自:

本帖最后由 無名世界 于 2014-8-9 20:36 编辑

awk 'BEGIN{for(i=1;i<=10;i++)printf("%d,%d,%010d,%010d,%010d,%010d,%010d,%010d,%d\n",i,i,i,i,i,i,i,i,strftime("%Y%m%d%H%M"))}'

%d,   %d,          %010d,       %010d,              %010d,           %010d,       %010d,       %010d,                %d
1       1      0000000001     0000000001   0000000001    0000000001    0000000001    0000000001    201407200104

如果要写多几行,就把这里的10改成需要的数字即可,例如:20  {for(i=1;i<=20;i++)

  %010d:    0000000001    刚好10个数字。
0

齐天大圣

赞同来自:

这个彰显了awk的强大!
0

gjc159357

赞同来自:

太强大
0

ChrisLinux

赞同来自:


哇,好强大
0

469327849

赞同来自:

{:4_97:}强大的awk
0

kimjustice

赞同来自:

阿铭 发表于 2013-7-15 17:34
awk 没有研究透彻,所以只能用shell搞起。其中用到了perl,所以脚本整体看起来比较啰嗦,希望能找到更好的 ...

#!/bin/bash
for i in `seq 1 10`
do
n=`echo $i|awk '{print length($0)}'`
n_0=$[10-$n]
c_0=""
for j in `seq 1 $n_0`
do
c_0="$c_0"0""
done
echo $i,$i,$c_0$i,$c_0$i,$c_0$i,`date +%Y%m%d%H%M%S`
done
0

陶小川 - less is more

赞同来自:

#!/usr/bin/python
# -*- coding: utf-8 -*-


import datetime


def get_data(num, time_now):

    list_num = [num]*8
    list_num.append(time_now)
    return "%d,%d,0d,0d,0d,0d,0d,0d,%s" % tuple(list_num)


def loop_count(times):

    for i in xrange(times):
        time_now = datetime.datetime.now().strftime("%Y%m%d%H%M%S")
        write_file(get_data(i+1, time_now))


def write_file(string):
    with open("output", 'a+') as filename:
        filename.write(string+'\n')


if __name__ == "__main__":

    loop_count(1000*1000)

用python写了一遍

回复帖子,请先登录注册

退出全屏模式 全屏模式 回复
评分
可选评分理由: