免费注册 查看新帖 |

Chinaunix

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

求助,关于awk中进行时间替换问题。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-11-22 00:38 |只看该作者 |倒序浏览
get_bill_from_tabn dbsale_rec.world  aaaaaa bbbbbb t10000001 "|" 1000000 "select phone_id,county_code,pay_fee,cust_id,cust_name,cust_address,exch_name from od_market_qqt"
get_bill_from_tabn dbsale_rec.world  aaaaaa bbbbbb t10000002 "|" 1000000 "select * from od_staff"

我有一个标准格式的文本,语句如上,以空格分隔,希望在$5这个域的后面批量添加上当天的系统时间变成如下:

get_bill_from_tabn dbsale_rec.world  aaaaaa bbbbbb t10000001_20061122 "|" 1000000 "select phone_id,county_code,pay_fee,cust_id,cust_name,cust_address,exch_name from od_market_qqt"
get_bill_from_tabn dbsale_rec.world  aaaaaa bbbbbb t10000002_20061122 "|" 1000000 "select * from od_staff"

试验了很多awk指令,都不得其解,echo "20"`date +%y%m%d`的值可以得到当天的时间,但是通过管道送到指定文本后,又无法在gsub()函数中调用,郁闷啊,都快1点了,还是搞不定,请各位大侠出手相助,并请做指令的简单说明。

我是shell编程菜鸟,刚学不久,多指教。

论坛徽章:
0
2 [报告]
发表于 2006-11-22 08:18 |只看该作者
datetime=`date +%Y%m%d`
awk  '{print $1,$2,$3,$4,$5"'_$datetime'"}'

论坛徽章:
0
3 [报告]
发表于 2006-11-22 09:04 |只看该作者
  1. awk 'BEGIN { print strftime("%Y%m%d", systime()) }'
复制代码


gawk 要是能用这个就不需要用date了

论坛徽章:
0
4 [报告]
发表于 2006-11-22 10:00 |只看该作者

awk

gawk "BEGIN { timea=strftime(\"_%Y%m%d\", systime()) }{$5=$5timea;print $0}" u_file.txt
>u_newfile.txt

论坛徽章:
0
5 [报告]
发表于 2006-11-22 10:21 |只看该作者
原帖由 随风漂 于 2006-11-22 10:00 发表
gawk "BEGIN { timea=strftime(\"_%Y%m%d\", systime()) }{$5=$5timea;print $0}" u_file.txt
>u_newfile.txt




在awk打开u_file.txt之前...shell已经KO了u_file.txt

论坛徽章:
0
6 [报告]
发表于 2006-11-22 17:36 |只看该作者
可以用
awk 'BEGIN{"date +%Y%m%d%H%M%S" | getline s_datetime;printf("%s\n",s_datetime);}'

论坛徽章:
0
7 [报告]
发表于 2006-11-22 18:08 |只看该作者
在线求救,我的awk不是gnu的,所以没有那些时间函数,只能用
datetime=`date +%Y%m%d`
awk  '{print $1,$2,$3,$4,$5"'_$datetime'"}'
这个语句替换,但是,由于我的文件最后的sql语句是不同的,导致要写很多$10....$15....
且没有规律性,不方便,于是我自己试验,发现用
datetime="'`date +%Y%m%d`'"
awk '{gsub($5,$5"'_$datetime'");print $0}' myfile
是可以替换的,但是最大最大的问题是,出来的结果:
get_bill_from_tabn dbsale_rec.world  yuxiajian_b yuxiajian_b t10000002_'20061122' "|" 1000000 "select * from od_staff"
那个添加上去的变量怎么带上了两个“'”,由于我不会替换掉这两个烦人的点,程序始终无法正常通过。
救命哦!!!
最好是用awk语句一次匹配上时间,行不行啊?????

还有,我希望好好学习一下awk,但是光看说明是在太抽象,写不出比较负责的文本处理程序。
我想对文本时限游标方式的逐行提取,截取中间的字段,然后进行逻辑判断....
请问大家,有这样的例子码?我想找个来研究一下。新学shell/awk问题多多,大家海涵。

论坛徽章:
0
8 [报告]
发表于 2006-11-22 18:50 |只看该作者
原帖由 langzi0731 于 2006-11-22 18:08 发表
在线求救,我的awk不是gnu的,所以没有那些时间函数,只能用
datetime=`date +%Y%m%d`
awk  '{print $1,$2,$3,$4,$5"'_$datetime'"}'
这个语句替换,但是,由于我的文件最后的sql语句是不同的,导致 ...



datetime="`date +%Y%m%d`"

你多了单引号..
sed & awk这书有些例子

论坛徽章:
0
9 [报告]
发表于 2006-11-22 19:16 |只看该作者
救命哦,我刚才想自己删除'
但是:
sed 's/\'//' myfile
指令报错啊,提示我输入字符串,怎么回事?

论坛徽章:
0
10 [报告]
发表于 2006-11-22 19:21 |只看该作者
原帖由 Edengundam 于 2006-11-22 18:50 发表



datetime="`date +%Y%m%d`"

你多了单引号..
sed & awk这书有些例子


如果没有单引号就会出错,我也搞不懂,为何会这样?哪位能用语法来解释一下这个问题?
没有单引号,结果就成了:t10000001_$datetime
而没有能匹配上原来赋值给datetime变量的值,把变量做文本字符串处理了。晕死!!!

救命哦。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP