时间:2021-07-01 10:21:17 帮助过:25人阅读
1)转化为格式化数据。
如何将一大段的包含换行、任意特殊字符的变量的文本内容赋值格式化是个问题?
2)文件读取,存储为不同的两个变量。根据文件特点,无非是:url作为key,汉字的内容作为value。用Map或者HashMap存储即可。这里不论是用C++或Java读文件,都是一笔不小的工作量开销。但我的时间只允许1个小时左右。
综上,选择shell脚本做格式化处理。
大致思路是:
1)url行保留,便于提取。
2)剩下的未被格式化的文本,删除空行、删除换行符,添加content的标记,便于提取。
3)一次提取一个url与之对应的content,构造成所需要的sql即可。
在url行的下一行的首部添加content=,目的:便于进行检索。
sed -i ‘/^\[url/ { n; s/^/content=/; }‘ $RST_FILE
sed -i ‘/^$/d‘ $RST_FILE
cat $RST_FILE | grep url > $URL_FILE
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
分割为两个文件逐行进行遍历。
#!/bin/sh
CONTENT_FILE=./content.txt
URL_FILE=./url.txt
RST_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
}
#生成sql
function build_rstdate()
{
icnt=1;
cat $CONTENT_FILE | while read line
do
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 line
do
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.sql
for((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.sql
done;
}
format_process;
build_rstdate;
[root@localhost 2017]# cat build_input.sh
#!/bin/sh
sed -i ‘s#</content>#</contentsize>#g‘ input.xml
sed -i ‘s#<content>#<contentsize>#g‘ input.xml
sed -i ‘s#</snapshot>#</snapshotsize>#g‘ input.xml
sed -i ‘s#<snapshot>#<snapshotsize>#g‘ input.xml
sed -i ‘s#<is_site_homepage>#</is_site_homepage>#2‘ input.xml
#在文件头插入格式化字符串
sed -i ‘1i\<?xml version="1.0" encoding="UTF-8"?>‘ input.xml
sed -i ‘2i\<HotNewsList>‘ input.xml
#文件末尾加入特定字符串
sed -i ‘$a\</HotNewsList>‘ input.xml
shell对文本的处理真的非常强大。一些命令行还不能“信手拈来”,有待进一步掌握提高!
20170222 22:36 于家中床前
作者:铭毅天下
转载请标明出处,