免费注册 查看新帖 |

Chinaunix

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

[文本处理] 文件的处理成SQL [复制链接]

论坛徽章:
1
15-16赛季CBA联赛之八一
日期:2017-02-21 17:19:04
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-09-02 12:31 |只看该作者 |倒序浏览
有这么一个文件内容如下:
a表名  a字段1  b表名  b字段1
a表名  a字段2  b表名  b字段2
a表名  a字段3  b表名  b字段3
a表名  a字段4  b表名  b字段4
a表名  a字段5  b表名  b字段5
c表名  c字段1  d表名  d字段1
e表名  e字段1  f表名   f字段1
g表名  g字段1  h表名  h字段1
g表名  g字段2  h表名  h字段2
g表名  g字段3 h表名   h字段3
i表名  i字段1  j表名  j字段1
i表名  i字段2  j表名  j字段2

求处理成如下的sql,并保存在一个文件中
select a字段1,a字段2,a字段3,a字段4,a字段5 from a表名
select b字段1,b字段2,b字段3,b字段4,b字段5 from b表名
select c字段1  from c表名
select d字段1  from d表名
select e字段1  from e表名
select f字段1  from f表名
select g字段1,g字段2,g字段3 from g表名
select h字段1,h字段2,h字段3 from h表名
select i字段1,i字段2 from i表名
select j字段1,j字段2 from j表名

自己写了一个awk的,但是总感觉自己写的很繁琐,应该有更简练的,求大家帮忙,拓展下思路,万分感谢!

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
2 [报告]
发表于 2015-09-02 12:35 |只看该作者
回复 1# psmzs


    把你的代码贴上来看看

论坛徽章:
1
15-16赛季CBA联赛之八一
日期:2017-02-21 17:19:04
3 [报告]
发表于 2015-09-02 12:40 |只看该作者
等晚上的,我的在公司里,中午凑空回家写的帖子

论坛徽章:
1
15-16赛季CBA联赛之八一
日期:2017-02-21 17:19:04
4 [报告]
发表于 2015-09-02 12:45 |只看该作者
回复 2# MMMIX


   自己写的总感觉太乱了,没条理,求指教

论坛徽章:
20
卯兔
日期:2015-01-26 22:05:142015亚冠之萨济拖拉机
日期:2015-09-10 15:15:282015亚冠之阿尔希拉尔
日期:2015-09-25 17:37:53程序设计版块每日发帖之星
日期:2015-10-03 06:20:00程序设计版块每日发帖之星
日期:2015-12-09 06:20:00CU十四周年纪念徽章
日期:2015-12-17 09:07:15程序设计版块每日发帖之星
日期:2015-12-25 06:20:34程序设计版块每日发帖之星
日期:2015-12-25 06:20:34程序设计版块每日发帖之星
日期:2015-12-25 06:20:342015亚冠之广州富力
日期:2015-08-27 19:29:56每日论坛发贴之星
日期:2015-08-26 06:20:002015亚冠之阿尔希拉尔
日期:2015-05-18 17:26:27
5 [报告]
发表于 2015-09-02 13:13 |只看该作者
回复 1# psmzs
  1. $ awk '{a[$1]=a[$1]?a[$1]","$2:$2;a[$3]=a[$3]?a[$3]","$4:$4}END{for(s in a)print "select "a[s]" from "s}' file
  2. select e字段1 from e表名
  3. select d字段1 from d表名
  4. select j字段1,j字段2 from j表名
  5. select c字段1 from c表名
  6. select i字段1,i字段2 from i表名
  7. select b字段1,b字段2,b字段3,b字段4,b字段5 from b表名
  8. select h字段1,h字段2,h字段3 from h表名
  9. select a字段1,a字段2,a字段3,a字段4,a字段5 from a表名
  10. select g字段1,g字段2,g字段3 from g表名
  11. select f字段1 from f表名
复制代码

论坛徽章:
20
卯兔
日期:2015-01-26 22:05:142015亚冠之萨济拖拉机
日期:2015-09-10 15:15:282015亚冠之阿尔希拉尔
日期:2015-09-25 17:37:53程序设计版块每日发帖之星
日期:2015-10-03 06:20:00程序设计版块每日发帖之星
日期:2015-12-09 06:20:00CU十四周年纪念徽章
日期:2015-12-17 09:07:15程序设计版块每日发帖之星
日期:2015-12-25 06:20:34程序设计版块每日发帖之星
日期:2015-12-25 06:20:34程序设计版块每日发帖之星
日期:2015-12-25 06:20:342015亚冠之广州富力
日期:2015-08-27 19:29:56每日论坛发贴之星
日期:2015-08-26 06:20:002015亚冠之阿尔希拉尔
日期:2015-05-18 17:26:27
6 [报告]
发表于 2015-09-02 13:19 |只看该作者
本帖最后由 songyc_2015 于 2015-09-02 14:05 编辑

回复 1# psmzs
优化拓展性好点:
  1. awk '{for(i=1;i<=NF;i+=2){if(i%2)s=i;a[$s]=a[$s]?a[$s]","$(s+1):$(s+1)}}END{for(s in a)print "select "a[s]" from "s}' file
复制代码

论坛徽章:
1
15-16赛季CBA联赛之八一
日期:2017-02-21 17:19:04
7 [报告]
发表于 2015-09-02 21:32 |只看该作者
回复 6# songyc_2015


   厉害啊,能不能保持住顺序?for in 顺序乱了

论坛徽章:
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
8 [报告]
发表于 2015-09-03 08:27 |只看该作者
回复 7# psmzs

>> ...能不能保持住顺序?for in 顺序乱了

$ awk '
{
  for(n=1;n<NF;n+=2){
    if(a[$n]=="")d[++cnt]=$n;
    a[$n]=a[$n]c[$n]$(n+1);
    c[$n]=","
  }
}
END{
  for(n=1;n<=cnt;n++)
    print "select "a[d[n]]" from "d[n]
}' sql.txt
select a字段1,a字段2,a字段3,a字段4,a字段5 from a表名
select b字段1,b字段2,b字段3,b字段4,b字段5 from b表名
select c字段1 from c表名
select d字段1 from d表名
select e字段1 from e表名
select f字段1 from f表名
select g字段1,g字段2,g字段3 from g表名
select h字段1,h字段2,h字段3 from h表名
select i字段1,i字段2 from i表名
select j字段1,j字段2 from j表名

   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP