免费注册 查看新帖 |

Chinaunix

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

求助 awk 文件处理问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-12-07 15:11 |只看该作者 |倒序浏览
目的生成mysql 语句

  例如 updata  xxx set   feeid=  a  ,desiid =a   where   seqid=b  的 大量sql 语句

文件 1 格式


1024
  1045
  3467
  .
..
....序列号
..  
  84920

文件二 格式

138******
  手机号

请问如何用awk  生成 updata  xxx  set  feeid=手机号 ,desid=手机号 where seqid= 序列号

[ 本帖最后由 西门子 于 2007-12-7 15:14 编辑 ]

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
2 [报告]
发表于 2007-12-07 15:18 |只看该作者
文件1和文件2 没有关系?
要做笛卡儿积?

论坛徽章:
0
3 [报告]
发表于 2007-12-07 15:20 |只看该作者

  1. 如果是1对1的话
  2. awk '{getline no < “file1"; printf("update xxx set feeid=%s ,desid=%s where seqid=%d\n",$0,$0,no) >>out.sql}' file2


  3. 如果需要的是乘积的话
  4. awk '{
  5. while((getline no < "file1")>0) printf("update xxx set feeid=%s ,desid=%s where seqid=%d\n",$0,$0,no) >>out.sql;
  6. close("file1");
  7. }' file2

复制代码


修正错误:
从文件读数据的时候,需要把文件名加上 双引号


[ 本帖最后由 springwind426 于 2007-12-7 15:27 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2007-12-07 15:20 |只看该作者
没有任何关系!!!

论坛徽章:
0
5 [报告]
发表于 2007-12-07 15:24 |只看该作者
awk '{getline no < sichuan; print("update xxx set feeid=%s ,desid=%s where seqid=%d\n",$1,$1,no) >>out}' ttt
awk: cmd. line:1: (FILENAME=ttt FNR=1) fatal: expression for `<' redirection has null string value
有错..........

我用的是bash  ........

[ 本帖最后由 西门子 于 2007-12-7 15:28 编辑 ]

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
6 [报告]
发表于 2007-12-07 15:26 |只看该作者
while read seqid
do
      awk -v id="$seqid" '{printf "update xxx set feeid=%s ,desid=%s where seqid=%d\n",$0,$0,id}' file2
done<file1

论坛徽章:
0
7 [报告]
发表于 2007-12-07 15:34 |只看该作者
原帖由 ly5066113 于 2007-12-7 15:26 发表
while read seqid
do
      awk -v id="$seqid" '{printf "update xxx set feeid=%s ,desid=%s where seqid=%d\n",$0,$0,id}' file2
done

这个循环是绝对的错误的,  生成的文件如下!!! seqid 都一样
update xxx set feeid=1384437 ,desid=1384437 where seqid=259164
update xxx set feeid=1356205 ,desid=1356205 where seqid=259164
update xxx set feeid=1348393,desid=1348393 where seqid=259164
update xxx set feeid=1362539 ,desid=1362539 where seqid=259164

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
8 [报告]
发表于 2007-12-07 15:42 |只看该作者
原帖由 西门子 于 2007-12-7 15:34 发表

这个循环是绝对的错误的,  生成的文件如下!!! seqid 都一样
update xxx set feeid=1384437 ,desid=1384437 where seqid=259164
update xxx set feeid=1356205 ,desid=1356205 where seqid=259164
update  ...


不懂你想要什么。
循环的结果是对于每个seqid,都会遍历所有的手机号。

论坛徽章:
0
9 [报告]
发表于 2007-12-07 17:10 |只看该作者
呵呵呵 没看懂题~ 路过

论坛徽章:
0
10 [报告]
发表于 2007-12-07 17:17 |只看该作者
原帖由 ly5066113 于 2007-12-7 15:26 发表
while read seqid
do
      awk -v id="$seqid" '{printf "update xxx set feeid=%s ,desid=%s where seqid=%d\n",$0,$0,id}' file2
done

表示怀疑 too
awk应该吃掉标准输入.呵呵也不太清楚
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP