首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

怎么在shell中按2个字符来截取文本文件中的中文字符

2012-02-04 
如何在shell中按2个字符来截取文本文件中的中文字符先说下业务需求吧:有一个日志文件,相当于是记事本格式

如何在shell中按2个字符来截取文本文件中的中文字符
先说下业务需求吧:
有一个日志文件,相当于是记事本格式的,每行是一条记录。
每行记录的长度是固定长度的,其中汉字是占位2个字符的,每行记录固定第几位到第几位是某种意义的。
现在的需求是将每行的记录截取出来,并导入数据库中。

服务器环境是linux,数据库是oracle,我准备用按行读文件的方式,将每行的字符串读取出来,然后分解字符串,然后组合成sql语句,并输出生一个sql脚本。

然后调用oracle的sqlplus,运行sql脚本,并提交数据。

日志中的一行数据如下:
105454 查询账户 ************9424 63.80 008493 ******11 00:交易成功

其中“105454”是一个字段,“查询账户”是一个字段。
“105454”是从第0位到第5位,共6个字符,“查询账户”是从第7位到第14位,共8个字符,或4个汉字。
请问如何截取?
另:有可能有的行数据,第二个字段不是汉字,是字母的,但是同样最多占位8个字符。
我目前使用的截取字符串的方式中,汉字被当成一个字符处理,所以无法使用。
我目前使用的脚本如下:

#!/bin/bash
 
#引入环境变量
. $HOME/.bash_profile
 
#设定sql脚本文件路径及文件名
SQLSCRIPT="$HOME/sqlfile.sql"

#删除同名文件
rm -rf $SQLSCRIPT

#读取日志文件
MY_FILE="/home/log/20110710log"

#判断文件是否存在
if [ -e $MY_FILE ]
then
MY_LINE_NO=1
 
while read MY_LINE
do
log[0]=${MY_LINE:0:6}
log[1]=${MY_LINE:7:8}
log[2]=${MY_LINE:18:18}
log[3]=${MY_LINE:34:11}
log[4]=${MY_LINE:46:6}
log[5]=${MY_LINE:53:8}
log[6]=${MY_LINE:62}
echo "insert into loguser.monlog0(logdate,logtime,txnname,txnpan,txnamt,txnnum,txntel,txnres) values('$LD','${log[0]}','${log[1]}','${log[2]}',${log[3]},'${log[4]}','${log[5]}','${log[6]}');">>$SQLSCRIPT 
MY_LINE_NO=$((MY_LINE_NO+1))
done < $MY_FILE
fi


[解决办法]
用awk行不?类似
log0=` echo $MY_LINE|awk '{print $1}' `
log1=` echo $MY_LINE|awk '{print $2}' `
这样,呵呵
[解决办法]

JScript code
awk '{if($2 ~/^[^a-zA-Z0-9]/) print $2}' inputfile#测试用例:105454 查询账户 ************9424 63.80 008493 ******11 00:交易成功105454 AABBCCDD ************9424 63.80 008493 ******11 00:交易成功#测试结果:查询账户 

热点排行