我试图在 ksh 文件中运行一些 perl,但没有得到我期望的结果。如果我在做一些语法错误的事情,而不是简单地得到某种错误,它会完成运行并创建大量文件,但并没有像我预期的那样.bak
预先添加到文件的每一行。$data
到目前为止我所得到的(contains
是我在文件前面声明的一个函数,但那部分工作正常):
if [[ $# != 3 ]];then
echo "Please specify 1 folder containing data files as well as 1 from and 1 to system id."
else
for file in `ls $1`;do
filePath=$1$file
fileName=`echo $filePath | awk -F'/' '{print$5}'`
contains $fileName "ACCUMS" && (
contains $fileName ".bak" || (
echo "Loading file: "$fileName
date=echo $fileName | awk -F'_' '{print$5}' | sed 's/.txt//'
data=$fileName"|"$2"|"$3"|"$date"|"
echo $data
echo /usr/local/bin/perl -pi.bak -e 's/^/$data/' $filePath
logFile="log"$curFile".txt"
echo "Log file: "$logFile
echo "Done loading file: "$fileName
$ORACLE_BIN/sqlldr user/pass@server control=control_file.ctl data=$filePath log=$logFile
curFile=$curFile+1
)
) || echo $fileName" not part of Accums. Skipped."
done
fi
.ksh
更糟糕的是,当我在 PuTTY 中直接运行以下命令时,它可以工作,所以这似乎是我试图从文件中调用 perl 代码的方式(即使我已经看过几个做类似事情的例子):
perl -pi.bak -e 's/^/hi|/' /path/data/file_Im_working_with.txt
如果重要的话,日志文件也不是我想要的。而不是为每个 sqlldr 调用创建大量它们,而是每次都覆盖它log0.txt
。我已经检查过了,数据文件的位置和所有内容都正确,所以这可能是我的问题的一部分或完全不相关的问题。
提前致谢!
编辑
除了 ThisSuitIsBlackNot 和 dms 所说的,我也不需要指定 perl 在这个系统上的位置,这样做实际上是把它搞砸了,这很奇怪,因为我检查了 perl 的东西在那里。