用awk编写生成以下结构文件的程序。( 最后列使用现在的时间,时间格式为YYYYMMDDHHMISS) 各列的值应如下所示,每增加一行便加1,共500万行。
1,1,0000000001,0000000001,0000000001,0000000001,0000000001,0000000001,2005100110101
2,2,0000000002,0000000002,0000000002,0000000002,0000000002,0000000002,2005100110101
1,1,0000000001,0000000001,0000000001,0000000001,0000000001,0000000001,2005100110101
2,2,0000000002,0000000002,0000000002,0000000002,0000000002,0000000002,2005100110101
0
awk 没有研究透彻,所以只能用shell搞起。其中用到了perl,所以脚本整体看起来比较啰嗦,希望能找到更好的解决办法。
PS: shell 执行效率很低,so 该脚本运行时间会很漫长!
- #! /bin/bash
- for i in `seq 1 5000000`; do
- n=`echo "$i"|awk '{print length($0)}'`
- export m=$[10-$n]
- export o=`perl -e '$a='0'; $b=$a x $ENV{"m"}; print $b;'`
- export j=$i
- p=`perl -e '$c=$ENV{"o"}.$ENV{"j"}; print $c;'`
- echo "$i,$i,$p,$p,$p,$p,$p,$p,`date +%Y%m%d%H%M%S`"
- done
PS: shell 执行效率很低,so 该脚本运行时间会很漫长!
0
谢谢您{:4_120:}
阿铭 发表于 2013-7-15 17:34 static/image/common/back.gif
awk 没有研究透彻,所以只能用shell搞起。其中用到了perl,所以脚本整体看起来比较啰嗦,希望能找到更好的解 ...
谢谢您{:4_120:}
1
赞同来自: 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"))}'
0
这个也是请别人写的.自己又琢磨了一下.搞明白大概思路,留在这里.记录,交流之用
阿铭 发表于 2013-7-17 11:38 static/image/common/back.gif
楼上的awk写得很棒! 赞一个!
这个也是请别人写的.自己又琢磨了一下.搞明白大概思路,留在这里.记录,交流之用
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个数字。
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
#!/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
阿铭 发表于 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)
# -*- 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写了一遍
编辑回复