免费注册 查看新帖 |

Chinaunix

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

[文本处理] shell怎么从sql语句执行结果中读取想要的字段值 [复制链接]

论坛徽章:
1
亥猪
日期:2013-10-30 23:29:55
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-03-26 13:06 |只看该作者 |倒序浏览
shell执行sql语句:
  1. select subject,pid,message from post
复制代码
其中表post为论坛的帖子表,subject为帖子名,pid为帖子ID,message为帖子正文,现在的情况是subject字段可能有空格,可能有数字,而pid肯定是数字,message里面什么文本内容都可能有,问题是,我怎么用shell分别取得这三个字段的正确值,之前用cut想直接截取,但是并不能得到正确结果,关键是subject帖子名的内容比较混杂,数字和空格都有,一下子不知道怎么操作了,麻烦各位帮帮忙

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
2 [报告]
发表于 2013-03-26 13:45 |只看该作者
请给点数据,以便测试。

论坛徽章:
1
亥猪
日期:2013-10-30 23:29:55
3 [报告]
发表于 2013-03-26 14:08 |只看该作者
回复 2# Shell_HAT

我现在的sql语句:
  1. select subject, pid, message from post
复制代码
得到的数据库数据:
  1. 学习Linux 1.2XXX 514 [font=新宋体][size=2][color=#222222]转发一个来自知乎上的问答,XXXXX
复制代码
其中:
学习Linux 1.2XXX为subject,即为标题;
514为pid,帖子ID
之后的文本是帖子内容

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
4 [报告]
发表于 2013-03-26 14:18 |只看该作者
回复 3# suanmeilizhi


论坛数据库是MySQL吗?它的输出结果默认用|给你分割好了
是否可以把pid放到第一列,这样至少第一列方便获取

论坛徽章:
1
亥猪
日期:2013-10-30 23:29:55
5 [报告]
发表于 2013-03-26 14:27 |只看该作者
回复 4# Shell_HAT


    数据库是mysql,但是并不是用 |隔开各个字段,而是用空格,先前有直接把pid放在第一个,确实方便读取,但是这样一来,分开subject和message就更难了吧?
    对于|隔开各个字段的问题,是否需要用到mysql的某个命令指定各个字段的分隔符?

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
6 [报告]
发表于 2013-03-26 15:25 |只看该作者
回复 5# suanmeilizhi


参考:
  1. select * from table_name into outfile "/tmp/a.txt" fields terminated by ',';
复制代码

论坛徽章:
1
射手座
日期:2014-03-10 14:24:52
7 [报告]
发表于 2013-03-26 15:35 |只看该作者
改改sql不行吗?

select subject||'|'||pid||'|'||message from post

论坛徽章:
93
2015年辞旧岁徽章
日期:2019-10-10 10:51:15CU大牛徽章
日期:2014-02-21 14:21:56CU十二周年纪念徽章
日期:2020-10-15 16:55:55CU大牛徽章
日期:2014-02-21 14:22:07羊年新春福章
日期:2019-10-10 10:51:39CU大牛徽章
日期:2019-10-10 10:55:38季节之章:春
日期:2020-10-15 16:57:40ChinaUnix元老
日期:2019-10-10 10:54:42季节之章:冬
日期:2019-10-10 10:57:17CU大牛徽章
日期:2014-02-21 14:22:52CU大牛徽章
日期:2014-03-13 10:40:30CU大牛徽章
日期:2014-02-21 14:23:15
8 [报告]
发表于 2013-03-26 16:18 |只看该作者

论坛徽章:
1
亥猪
日期:2013-10-30 23:29:55
9 [报告]
发表于 2013-03-26 18:11 |只看该作者
回复 8# seesea2517


   
好强,居然能用awk,我决定还是用sql拼接,在每个字段上加上自定义的分隔符,比如“|”,然后在shell脚本中用cut根据分隔符取得字段

论坛徽章:
93
2015年辞旧岁徽章
日期:2019-10-10 10:51:15CU大牛徽章
日期:2014-02-21 14:21:56CU十二周年纪念徽章
日期:2020-10-15 16:55:55CU大牛徽章
日期:2014-02-21 14:22:07羊年新春福章
日期:2019-10-10 10:51:39CU大牛徽章
日期:2019-10-10 10:55:38季节之章:春
日期:2020-10-15 16:57:40ChinaUnix元老
日期:2019-10-10 10:54:42季节之章:冬
日期:2019-10-10 10:57:17CU大牛徽章
日期:2014-02-21 14:22:52CU大牛徽章
日期:2014-03-13 10:40:30CU大牛徽章
日期:2014-02-21 14:23:15
10 [报告]
发表于 2013-03-27 09:48 |只看该作者
回复 9# suanmeilizhi


    如果要用 | 分隔的话,我建议你直接用表格方式的输出,然后输出到临时文件中,这样就带 | 分隔了,你也不用自己手工 concat 了。再读取文件进行处理。
  1. [seesea2517@UC ~]# mysql -uroot -t -N -e'select * from temp.test2;' > a.txt

  2. [seesea2517@UC ~]# cat a.txt
  3. +-----+------+
  4. |   1 |    0 |
  5. | 2 2 |    1 |
  6. |   3 |  3 3 |
  7. | 4 4 |  4 4 |
  8. |   5 |    0 |
  9. |   6 |    4 |
  10. +-----+------+
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP