很早以前写的处理数据库的脚本,今天偶尔翻出来了,贴上免得以后想用又要重新写。
#!/bin/sh
#备份数据库
mysqldump -uroot -p123456 haocaiwu > haocaiwu.sql
#删除内容数据库导出临时文件
rm -f /cygdrive/r/w/wiki_doc_content_tab.tmp
#导出数据
mysql -uroot -p123456 haocaiwu -e”select concat(’update wiki_doc set doc_content=\”,doc_content,’\’ where doc_id=’,doc_id,’;') into outfile ‘r://w/wiki_doc_content_tab.tmp’ from wiki_doc”
#转化编码为GBK
iconv.exe -f utf-8 -t GBK /cygdrive/r/w/wiki_doc_content_tab.tmp > /cygdrive/r/w/wiki_doc_content_tab.tmp.gbk
#去掉内容里所有的链接,初始化数据
cat /cygdrive/r/w/wiki_doc_content_tab.tmp.gbk |sed -e ’s/<\/a>//g’|sed -e ’s/<a href[^>]*>//g’ > /cygdrive/r/w/wiki_doc_content_tab.tmp.gbk.clean
#运行clean_tesu.sh,去掉特殊字符(目前不能在shell下运行,只能复制粘贴了运行内容了。得到wiki_doc_content_tab.tmp.gbk.clean.again)
#删除keyword数据导出临时文件
rm -f /cygdrive/r/w/keyword.tmp
#导出keyword数据
mysql -uroot -p123456 -Dhaocaiwu -e”SELECT doc_title INTO OUTFILE ‘r://w/keyword.tmp’ FROM wiki_doc”
#转化为GBK编码
iconv.exe -f utf-8 -t GBK /cygdrive/r/w/keyword.tmp > /cygdrive/r/w/keyword.tmp.gbk
#去掉多余字符,并且去掉重复,格式化keyword文件。
./makekeyword.sh
#|tr “\n” “\t”
#首先进行unicode编码,防止汉字在sed的处理的时候出问题。
cat keyword.tmp.gbk.clean | ./urlencode > key.en
按照长度排列,这样会首先匹配词组,然后再匹配字。
awk ‘{print length($0),$0}’ key.en |sort -nr|sed ‘/^[^ ]* /s///’> key.en.swp;mv key.en.swp key.en
#给key.en加上两个(),生成key.enformated,方便后面做匹配。
cat key.en |awk ‘{print “(”$1″)”}’ > key.enformated
cat wiki_doc_content_tab.tmp.gbk.clean.again| ./urlencode > c.en
生成第一次编码keyword文件,
cat key.en|./urldecode > key.de
echo “” > url.en1 ;for i in `cat key.de`; do ./e.sh $i >> url.en1 ;done
cat url.en1 |./urlencode > url.en2
合并key.en和url.en2到 k_url.en,这样k_url.en可以被用来当作匹配有keyword的url文件,可以直接调用啦。(注意还没有自动删除最上面一行空白)
paste.exe key.enformated url.en2 >k_url.en
#开始转换
#for i in `cat key.en`;do m=`cat k_url.en|grep $i`; sed -e “s/$i/$m/g” c.en > c.en.tmp;mv c.en.tmp c.en;done
#for i in `cat key.en`;do m=cat k_url.en|grep $i|awk ‘{print $2}’;sed -e “s/$i/$m/g” c.en > e.en.tmp;mv c.en.tmp c.en;done
#for i in `cat key.en`;do m=`cat k_url.en|grep $i|awk ‘{print $2}’`;sed -e “s/$i/$m/g” c.en > c.en.tmp;mv c.en.tmp c.en;done
#for i in `cat key.en`;do m=`cat k_url.en|grep $i|awk ‘{print $2}’`;sed -e ’s/”$i”/”$m”/g’ c.en > c.en.tmp;mv c.en.tmp c.en;done
#for i in `cat key.en`;do m=`cat k_url.en|grep $i|awk ‘{print $2}’`;sed -e “s/$i/$m/g” c.en > c.en.tmp;mv c.en.tmp c.en;done
for i in `cat key.en`;do m=`cat k_url.en|grep “(”$i”)”|awk ‘{print $2}’`;sed -e “s/$i/$m/g” c.en > c.en.tmp;mv c.en.tmp c.en;done
#转换GBK到utf-8
#iconv.exe -f GBK -t utf-8 /cygdrive/r/w/wiki_doc_content_tab.tmp.gbk.clean > /cygdrive/r/w/wiki_doc_content_tab.tmp
#导入数据库
#mysql -uroot -p123456 haocaiwu < r://w/wiki_doc_content_tab.tmp
过滤掉内容的<a href=xxx></a>
cat sewinter_wikihaocaiwu.gb2312 |sed -e ’s/<\/a>//g’|sed -e ’s/<a href[^>]*>//g’
过滤出简介,用时间2008-01-20 22:22:00 这样的格式
cat sewinter_wikihaocaiwu.gb2312.clean|awk -F”‘[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9] [0-9][0-9]:[0-9][0-9]:[0-9][0-9]’,” ‘NR==3 {print $1}’
过滤出正文,用时间2008-01-20 22:22:00 这样的格式
cat sewinter_wikihaocaiwu.gb2312.clean|awk -F”‘[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9] [0-9][0-9]:[0-9][0-9]:[0-9][0-9]’,” ‘NR==3 {print $2}’
得到内容部分
cat sewinter_wikihaocaiwu.gb2312.clean|awk -F”‘[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9] [0-9][0-9]:[0-9][0-9]:[0-9][0-9]’,” ‘NR==1 {print $2}’
SET character_set_client = utf8;
SET character_set_results = utf8;
SET character_set_connection = utf8;
在mysql配置的时候:
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
default-character-set=utf8
在建立数据库的时候,最好就直接建立成utf-8的。
CREATE DATABASE haocaiwu
CHARACTER SET utf8
DEFAULT CHARACTER SET utf8
COLLATE utf8_general_ci
DEFAULT COLLATE utf8_general_ci ;
如果是已经建立好的数据库,一定要把数据库修改成utf-8的,这样在后面select的时候才不会出错,
ALTER DATABASE haocaiwu
CHARACTER SET utf8
DEFAULT CHARACTER SET utf8
COLLATE utf8_general_ci
DEFAULT COLLATE utf8_general_ci;
这样数据会追加到后面:
rm -f /cygdrive/z/w/wiki_doc_content_tab.tmp
mysql -uroot -p123456 -Dhaocaiwu -e”SELECT doc_content INTO OUTFILE ‘z://w/wiki_doc_content_tab.tmp’ FIELDS TERMINATED BY ‘#’ FROM wiki_doc”
iconv.exe -f utf-8 -t GBK /cygdrive/z/w/wiki_doc_content_tab.tmp > /cygdrive/z/w/wiki_doc_content_tab.tmp.gbk
iconv.exe -f GBK -t utf-8 /cygdrive/z/w/wiki_doc_content_tab.tmp.gbk > /cygdrive/z/w/wiki_doc_content_tab.tmp
mysql -uroot -p123456 -Dhaocaiwu -e”LOAD DATA INFILE ‘z://w/wiki_doc_content_tab.tmp’ INTO TABLE wiki_doc FIELDS TERMINATED BY ‘#’ (doc_content)”
正确替换的格式是,唯一的缺陷是没有replace”‘”,所以在导入的时候可能会出问题,如果是php程序导入的内容估计没有问题,因为在php程序往数据库里写的时候就转义过了。
mysql -uroot -p123456 haocaiwu -e”select concat(’update wiki_doc set doc_content=\”,doc_content,’\’ where doc_id=’,doc_id,’;') into outfile ‘z://w/wiki_doc_content_tab.tmp’ from wiki_doc where doc_id between 50 and 200″
mysql -uroot -p123456 haocaiwu < z://w/wiki_doc_content_tab.tmp
这样可以替换原数据,
rm -f /cygdrive/z/w/wiki_doc_content_tab.tmp
mysql -uroot -p123456 haocaiwu -e”select concat(’update wiki_doc set doc_content=\”,doc_content,’\’ where doc_id=’,doc_id,’;') into outfile ‘z://w/wiki_doc_content_tab.tmp’ from wiki_doc”
iconv.exe -f utf-8 -t GBK /cygdrive/z/w/wiki_doc_content_tab.tmp > /cygdrive/z/w/wiki_doc_content_tab.tmp.gbk
iconv.exe -f GBK -t utf-8 /cygdrive/z/w/wiki_doc_content_tab.tmp.gbk > /cygdrive/z/w/wiki_doc_content_tab.tmp
mysql -uroot -p123456 haocaiwu < z://w/wiki_doc_content_tab.tmp
导出2000-3000,并且替换。
rm -f /cygdrive/z/w/wiki_doc_content_tab.tmp
mysql -uroot -p123456 haocaiwu -e”select concat(’update wiki_doc set doc_content=\”,doc_content,’\’ where doc_id=’,doc_id,’;') into outfile ‘z://w/wiki_doc_content_tab.tmp’ from wiki_doc where doc_id between 2000 and 3000″
iconv.exe -f utf-8 -t GBK /cygdrive/z/w/wiki_doc_content_tab.tmp > /cygdrive/z/w/wiki_doc_content_tab.tmp.gbk
iconv.exe -f GBK -t utf-8 /cygdrive/z/w/wiki_doc_content_tab.tmp.gbk > /cygdrive/z/w/wiki_doc_content_tab.tmp
mysql -uroot -p123456 haocaiwu < z://w/wiki_doc_content_tab.tmp
rm -f /cygdrive/z/w/wiki_doc_content_tab.tmp
mysql -uroot -p123456 haocaiwu -e”select concat(’update wiki_doc set doc_content=\”,doc_content,’\’ where doc_id=’,doc_id,’;') into outfile ‘z://w/wiki_doc_content_tab.tmp’ from wiki_doc where doc_id”
iconv.exe -f utf-8 -t GBK /cygdrive/z/w/wiki_doc_content_tab.tmp > /cygdrive/z/w/wiki_doc_content_tab.tmp.gbk
cat /cygdrive/z/w/wiki_doc_content_tab.tmp.gbk |sed -e ’s/<\/a>//g’|sed -e ’s/<a href[^>]*>//g’ > /cygdrive/z/w/wiki_doc_content_tab.tmp.gbk.clean
iconv.exe -f GBK -t utf-8 /cygdrive/z/w/wiki_doc_content_tab.tmp.gbk.clean > /cygdrive/z/w/wiki_doc_content_tab.tmp
mysql -uroot -p haocaiwu < z://w/wiki_doc_content_tab.tmp
得到keyword并且过滤掉特殊字符,并且去掉重复字符:
mysql -uroot -p -Dhaocaiwu -e”SELECT doc_title INTO OUTFILE ‘z://w/keyword.tmp’ FROM wiki_doc
iconv.exe -f utf-8 -t GBK /cygdrive/z/w/keyword.tmp > /cygdrive/z/w/keyword.tmp.gbk
cat keyword.tmp.gbk |sed \
-e ’s/([^>]*)//g’ \
-e ’s/([^>]*)//g’ \
-e ’s/!//g’ \
-e ’s/。//g’ \
-e ’s/,//g’ \
-e ’s/?//g’ \
-e ’s/@//g’ \
-e ’s/#//g’ \
-e ’s/$//g’ \
-e ’s/%//g’ \
-e ’s/︿//g’ \
-e ’s/&//g’ \
-e ’s/*//g’ \
-e ’s/-//g’ \
-e ’s/+//g’ \
-e ’s/://g’ \
-e ’s/;//g’ \
-e ’s/'//g’ \
-e ’s/"//g’ \
-e ’s/~//g’ \
-e ’s/`//g’ \
-e ’s/·//g’ \
-e ’s/¥//g’ \
-e ’s/|//g’ \
-e ’s/“//g’ \
-e ’s/”//g’ \
-e ’s////g’ \
-e ’s/——//g’ \
-e ’s/—//g’ \
-e ’s/、//g’ \
-e ’s/{[^>]*}//g’ \
-e ’s/<[^>]*>//g’ \
-e ’s/[[^>]*]//g’ \
-e ’s/"[^>]*"//g’ \
-e ’s/“[^>]*”//g’ \
-e ’s/《[^>]*》//g’ \
-e ’s/\~//g’ \
-e ’s/\`//g’ \
-e ’s/\!//g’ \
-e ’s/\@//g’ \
-e ’s/\#//g’ \
-e ’s/\$//g’ \
-e ’s/\%//g’ \
-e ’s/\^//g’ \
-e ’s/\&//g’ \
-e ’s/\*//g’ \
-e ’s/(//g’ \
-e ’s/)//g’ \
-e ’s/\_//g’ \
-e ’s/\+//g’ \
-e ’s/{//g’ \
-e ’s/}//g’ \
-e ’s/\[//g’ \
-e ’s/\]//g’ \
-e ’s/\|//g’ \
-e ’s/\://g’ \
-e ’s/\”//g’ \
-e ’s/\>//g’ \
-e ’s/\?//g’ \
-e ’s/\,//g’ \
-e ’s/\.//g’ \
-e ’s/\///g’ \
-e ’s///g’ \
-e ’s///g’ \
-e ’s///g’ \
-e ’s///g’ \
-e ’s///g’ \
-e ’s/\[[^>]*]\]//g’ \
-e ’s/\”[^>]*\”//g’ \
-e ’s/\<[^>]*\>//g’ \
-e ’s/{[^>]*}//g’ \
-e ’s/\<//g’ \
-e ’s/\;//g’ \
-e “s/\’[^>]*\’//g” \
-e ’s/\\//g’ \
-e “s/\’//g”
注意:
1、不要使用 -e ’s/{[^>]*}//g’ \,也不能用-e ’s/\<[^>]*\>//g’ \,否则会匹配所有的英文单词,导致维生素没有ABC区分,只有“维生素”这个单词的关联。
2、匹配{}或者()这样的应该先放在前面执行。
2、部分汉字损坏。
3. -e ’s/://g’ \ 这句删除很重要。