linux下文件字符集轉化實戰篇
------------------------------------------
爲何轉換編碼,原由:分析應用程序日誌,文件編碼格式gb2312(含中文字符),
經過linux shell腳本從日誌中提取出須要的字段並生成有固定符號隔離的文本文件導入到mysql數據庫,
mysql創建的庫字符集是utf8(特殊緣由沒有改爲gb2312),因爲原始的日誌文件是gb2312格式,
經過shell生成的最終文件編碼格式也是gb2312編碼,因此才須要用到編碼轉換,
mysql庫字符集編碼必須與導入的文本文件編碼格式一致,才能順利導入。
腳本
# vi x
#!/bin/sh
ts=`(date +%Y%m%d)`
#targetdir=/root/siji/
#cd $targetdir
cat alertlog | grep $ts | grep -a '級' > c34log
# 逐一取須要的字段,並用;號隔開
cat c34log | awk '{print $1}' | sed 's/.*$/&\;/g'>s1
cat c34log | awk '{print $2}' | sed 's/.*$/&\;/g'>s2
cat c34log | awk '{print $3}' | sed 's/.*$/&\;/g'>s3
cat c34log | awk '{print $4}' | sed 's/.*$/&\;/g'>s4
cat c34log | awk '{print $5}' | sed 's/.*$/&\;/g'>s5
cat c34log | awk -F'(' '{print $2}' | awk -F')' '{print $1}' | sed 's/%//g' | sed 's/.*$/&\;/g' >s6
# 合成各個字段,生成最終文本文件
paste s1 s2 s3 s4 s5 s6 > all
# 把含中文的文本文件轉換成的utf8編碼格式
enca -L zh_cn -x utf8 all
# 導入數據庫
/usr/local/mysql/bin/mysql -h 127.0.0.1 -u root -pYOUR_PASSWORD <sql
sql文件內容(sql語句)
# vi sql
# 使用alertlog數據庫
use alertlog;
# 導入生成的all文本文件,其中用;隔離各個字段,回車隔離每行
load data local infile 'all' into table c3log fields terminated by ';' lines terminated by '\n';
# chmod 711 x
一:字符編碼的轉換工具
1.多平臺方法:
iconv 提供標準的程序和API來進行編碼轉換;
convert_encoding.py 基於Python的文本文件轉換工具;
decodeh.py 提供算法和模塊來談測字符的編碼;
2.Linux:
recode 轉換文件編碼;
Utrac 轉換文件編碼;
cstocs 轉換文件編碼;
convmv 轉換文件名編碼;
enca 分析給定文件的編碼;
3.Windows:
cscvt 字符集轉換工具;
二:linux下查看文件編碼
1. 在vi中查看文件編碼
:set fileencoding
2. 用enca強大的查看編碼工具
# 查看文件編碼
# enca -L 如今文件的語言 -d 需查看編碼的文件名
如 enca -L zh_cn -d test_zh_cn.file
------------
# enca -l language 查看支持的語言
三. linux轉換文件編碼
1.enca轉化編碼(強烈推薦enca工具)
# enca -L 如今文件的語言 -x 須要轉換編碼 須要轉換編碼的文件
如 enca -L zh_cn -x utf8 test_zh_cn.file
2. iconv轉換,這個工具很差使!常常轉化不成功
iconv -f 文件原來編碼 -t 須要轉換的編碼 須要轉換的編碼的文件 -o 轉換編碼後的文件
或者
iconv -f 文件原來編碼 -t 須要轉換的編碼 須要轉換的編碼的文件 > 轉換編碼後的文