|
蓝森林 http://www.lslnet.com 2006年6月26日 11:18
高手帮帮忙,搞了半天没搞定
文本内容如下
fafdafdasfadsfsda
BEGIN
0 20060705 13305273036 a 5000 02-JUL-06 1
0 20060702 13305273036 b 5000 02-JUL-06 1
0 20060702 13305273036 b 5000 02-JUL-06 1
THE END
如何取出begin和end间的内容
生成sql语句插入到数据库中,用了sqlldr感觉不是太好用
用awk处理文本也不行
下面是我写的一部分程序
m=`sed -n '/BEGIN/=' $userdata`
n=`sed -n '/END/=' $userdata`
start=$[m+1]
end=$[n]
#echo $start
echo $end
start=$[m+1]
end=$[end]
awk 'NR=$i{ i=$start;while(i<$end) {print $i;i++}}' $userdata |
awk 'NR=$i{ i=$start;while(i<$end) {print $i;i++}}' $userdata
好像$start取不到值 |
sed -n '/BEGIN/,/END/{/BEGIN/d;/END/d;p}' urfile
awk '/BEGIN/,/END/{if ($0!~/BEGIN/&&$0!~/END/)print}' urfile |
3q楼上的两位,有没有办法把这些数据组织成sql语句
如insert into table value(取出的字段),awk的printf我没用过,感觉还是传变量的问题,看了十三篇,遇到这些问题还是一头雾水
伤脑筋啊!^_^ |
dbtemp='dbtmp.cvs' #存放返回报表中的有效数据
tmpsql='tmpload.sql' #存放临时生成的sql语句
awk '/TEXT_BEGIN/,/TEXT_END/{if ($0!~/TEXT_BEGIN/&&$0!~/TEXT_END/)print}' $userdata >$dbtemp
awk '{printf("INSERT INTO report_errord VALUES (\047%s\047, \047%s\047, \047%s\047, \047%s\047, \047%s\047, to_number(\047%s\047), \047%s\047);\n",$6,$1,$2,$3,$4,$5,$7)}' $dbtemp >$tmpsql
###生成sql语句
dbuser= #定义数据库登陆
sqlplus -s $dbuser<<EOF
@tmpload.sql;
commit;
exit
EOF
rm $dbtemp
rm $tmpsql
谢谢waker的帮忙,已经搞定,顺便把我的程序弄出来给大家一点帮助^_^ |
| |