《懶人Shell指令碼》之七——格式化處理資料存入資料庫實現

來源:互聯網
上載者:User

標籤:null   hashmap   最大的   news   項目   ring   ref   str   one   

0、引言

實際應用開發中遇到:將非格式化的檔案資料存放區到資料庫中。對於傳統的格式化的資料:ini/json/xml我們都有現成的類庫去實現。而對於如下非格式化的資料呢?以下是我的思考與實現。

資料截取片段如下所示:

[[email protected] 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指令碼實現
[[email protected] 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
如果感覺本文對您有協助,請點擊‘頂’支援一下,您的支援是我堅持寫作最大的動力,謝謝!

《懶人Shell指令碼》之七——格式化處理資料存入資料庫實現

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.