《懒人Shell脚本》之七——格式化处理数据存入数据库实现
来源:互联网 发布:linux子目录权限 编辑:程序博客网 时间:2024/05/17 04:49
0、引言
实际应用开发中遇到:将非格式化的文件数据存储到数据库中。对于传统的格式化的数据:ini/json/xml我们都有现成的类库去实现。而对于如下非格式化的数据呢?以下是我的思考与实现。
数据截取片段如下所示:
[root@localhost 2017]# head -n 10 input.txt[url]http://epaper.tianjinwe.com/mrxb/mrxb/2013-02/21/content_7566593.htm新报讯【记者王晶通讯员赵子强】对31.66万平方米的旧楼进行改造,建成丰达园二期配套幼儿园,全年新增就业3600人,城乡居民医疗保险参保率达100%……津南区咸水沽镇2017年度为民服务十项民心工程确定,涉及基础设施、教育、环境治理、居民保障增收、困难群众生活等多个方面。 今年,咸水沽镇将加快示范镇建设进程,启动四里沽村住宅拆迁,完成博雅时尚三期16.5万平方米还迁房全部配套工作,完成东张庄、北洋村还迁工作,启动金丰里四、五号库项目31.15万平方米的还迁工作,保证吴稻地、李庄子、潘庄子村群众顺利还迁。同[url]http://epaper.tianjinwe.com/mrxb/mrxb/2013-02/21/content_7566617.htm2月21日 星期二 天津卫视(101) 19:30 快乐生活剧场:星光灿烂(5、6) 21:25 幸福来敲门 天视1套(102) 18:30 都市报道60分 19:30 第1观察 21:00 新闻延长线 21:30 热播1小时 天视2套(103) 18:40 多彩剧场:老公们的私房钱(47);咱家(1、2) 21:10 音乐视界 天视3套(104) 20:00 晚八点剧场:战神之血染的青春(21-23) 22:40 晚间剧场:山河同在(42、43) 天视5套(106) 18:00 旗开得胜 19:30 我是棋王(23) 21:35 科学健身一点通 21:45 一马当先 22:00 牌王看牌 天视6套
1、思路探讨
1)转化为格式化数据。
如何将一大段的包含换行、任意特殊字符的变量的文本内容赋值格式化是个问题?
2)文件读取,存储为不同的两个变量。根据文件特点,无非是:url作为key,汉字的内容作为value。用Map或者HashMap存储即可。这里不论是用C++或Java读文件,都是一笔不小的工作量开销。但我的时间只允许1个小时左右。
综上,选择shell脚本做格式化处理。
大致思路是:
1)url行保留,便于提取。
2)剩下的未被格式化的文本,删除空行、删除换行符,添加content的标记,便于提取。
3)一次提取一个url与之对应的content,构造成所需要的sql即可。
2、核心实现步骤
第1步:格式化文本文件
在url行的下一行的首部添加content=,目的:便于进行检索。
sed -i '/^\[url/ { n; s/^/content=/; }' $RST_FILE
第2步:删除空行
sed -i '/^$/d' $RST_FILE
第3步:提取url
cat $RST_FILE | grep url > $URL_FILE
第4步:删除处理过的url行
sed -i '/url/d' $RST_FILE
第5步:换行符替换为空格
sed -i ':a;N;$ s/\n/ /g;ba' $RST_FILE
第6步:content前加换行符
sed -i 's#content#\ncontent#g' $RST_FILE
第7步:提取content到content.txt
cat $RST_FILE | grep content > $CONTENT_FILE
3、脚本源码
分割为两个文件逐行进行遍历。
#!/bin/shCONTENT_FILE=./content.txtURL_FILE=./url.txtRST_FILE=./input.txt#格式化文件function format_process(){ sed -i '/^\[url/ { n; s/^/content=/; }' $RST_FILE sed -i '/^$/d' $RST_FILE cat $RST_FILE | grep url > $URL_FILE #删除处理过的url行 sed -i '/url/d' $RST_FILE sed -i ':a;N;$ s/\n/ /g;ba' $RST_FILE sed -i 's#content#\ncontent#g' $RST_FILE cat $RST_FILE | grep content > $CONTENT_FILE }#生成sqlfunction build_rstdate(){icnt=1;cat $CONTENT_FILE | while read linedo mkdir -p ./output#生成每个独立的content文件 echo $line > ./output/content_${icnt}.txt sed -i 's#content\=##g' ./output/content_${icnt}.txt icnt=$[$icnt+1]; echo icnt=$icnt;done;export gcnt=0;iurlcnt=0;cat $URL_FILE | while read linedo iurlcnt=$[$iurlcnt+1]; echo $iurlcnt > ./output/.cnts_rst.txt#生成每个独立的url文件 echo $line > ./output/url_${iurlcnt}.txt sed -i 's#\[url\]##g' ./output/url_${iurlcnt}.txt #export gcnt=$iurlcnt;done;gcnt=`cat ./output/.cnts_rst.txt`echo gcnt=$gcnt#构造成sql文件cat /dev/null > update_sql.sqlfor((i=1;i<=$gcnt;i++))do url=`cat ./output/url_${i}.txt`; content=`cat ./output/content_${i}.txt`; # echo url=$url # echo content=$content echo "update gather_rst set content='$content' where url='$url';" >> update_sql.sqldone;}format_process;build_rstdate;
格式化xml脚本实现
[root@localhost 2017]# cat build_input.sh#!/bin/shsed -i 's#</content>#</contentsize>#g' input.xmlsed -i 's#<content>#<contentsize>#g' input.xmlsed -i 's#</snapshot>#</snapshotsize>#g' input.xmlsed -i 's#<snapshot>#<snapshotsize>#g' input.xmlsed -i 's#<is_site_homepage>#</is_site_homepage>#2' input.xml#在文件头插入格式化字符串sed -i '1i\<?xml version="1.0" encoding="UTF-8"?>' input.xmlsed -i '2i\<HotNewsList>' input.xml#文件末尾加入特定字符串sed -i '$a\</HotNewsList>' input.xml
4、小结
shell对文本的处理真的非常强大。一些命令行还不能“信手拈来”,有待进一步掌握提高!
20170222 22:36 于家中床前
作者:铭毅天下
转载请标明出处,原文地址:
http://blog.csdn.net/laoyang360/article/details/56510665
如果感觉本文对您有帮助,请点击‘顶’支持一下,您的支持是我坚持写作最大的动力,谢谢!
1 0
- 《懒人Shell脚本》之七——格式化处理数据存入数据库实现
- 《懒人Shell脚本》之八——定期备份Mysql数据库表的实现
- 《懒人Shell脚本》之二——语料库的格式化输出
- 《懒人Shell脚本》之三——微博分类信息获取与格式化
- 《懒人Shell脚本》之九——批量格式转换脚本实现
- 《懒人Shell脚本》之一——遍历文件并格式化输出文件
- 《懒人Shell脚本》之四——日志条数动态实时统计
- 《懒人Shell脚本》之五——一键修改分布式系统配置文件
- 《懒人Shell脚本》之十——统计多重路径下的不同扩展名文件及个数
- 《懒人Shell脚本》之十——统计多重路径下的不同扩展名文件及个数
- Shell脚本实现数据父子关系定义——目标:将目标数据批量导入MySQL数据库
- mysql数据库批量插入数据shell脚本实现
- shell脚本实现删除过期数据库中的数据
- 白手起家学习数据科学 ——处理数据之“数据清洗与再处理篇”(七)
- Shell 脚本之字符串处理
- shell 脚本之文本处理
- shell脚本之流程控制(七)
- Java实现——将数据存入剪切板
- 【Kinect】5th-Kinect深度图像采集和Opencv差帧法运动目标检测
- ubuntu环境下访问windows共享目录
- 实现App跳转到应用商店
- 一款高质的棋牌游戏具有哪些特点
- ubuntu下mysql的常用命令
- 《懒人Shell脚本》之七——格式化处理数据存入数据库实现
- 抽奖demo
- 从另外一个窗体程序中控制naviswork中的视图
- Tomcat部署无乱码,换成glassfish就发生乱码的解决方法
- Android中使用开源框架EventBus3.0实现Fragment之间的通信交互
- block内存管理
- java并发编程实践学习(16)Java存储模型
- 高并发量网站解决方案
- Vulkan编程指南翻译 第四章 队列和命令 第1节 管理资源的状态