这是我的第一篇文章,希望能够让我的问题变得清晰。使用文件名的前3个字符作为shell脚本中的变量
我是shell脚本的新手,我的任务是为csv文件的每一行添加一个新值。需要添加的值基于文件名的前三位数字。
我有点背景。我收到的csv文件最终被加载到分区的oracle表中。文件名(例如BATTESTFILE.txt)的开头包含分区站点,因此我需要编写一个脚本,该脚本采用文件名的前3个字符(在本例中为BAT),并将其添加到文件每行的末尾。
我已经走到这一步,是当我剥代码的裸基本什么,我需要做的最接近:
build_files()
{
OLDFILE=${filename[@]}.txt
NEWFILE=${filename[@]}.NEW.txt
ABSOLUTE='path/scripts/'
FULLOLD=$ABSOLUTE$OLDFILE
FULLNEW=$ABSOLUTE$NEWFILE
sed -e s/$/",${j}"/ "${FULLOLD}" > "${FULLNEW}"
}
set -A site 'BAT'
set -A filename 'BATTESTFILE'
for j in ${site[@]}; do
for i in ${filename[@]}; do
build_files ${j}
done
done
在这里,我已经建立了一个数组site
一样会有6“网站',这样可以很容易地在文件传递给我时向代码添加附加内容。对于filename
阵列也是如此。
该代码有效,但并不像我需要的那样自动化。我的一个最近的尝试已经低于:
build_files()
{
OLDFILE=${filename[@]}.txt
NEWFILE=${filename[@]}.NEW.txt
ABSOLUTE='/app/dss/dsssis/sis/scripts/'
FULLOLD=$ABSOLUTE$OLDFILE
FULLNEW=$ABSOLUTE$NEWFILE
sed -e s/$/",${j}"/ "${FULLOLD}" > "${FULLNEW}"
}
set -A site 'BAT'
set -A filename 'BATTESTFILE'
for j in ${site[@]}; do
for i in ${filename[@]}; do
trust=echo "$filename" | cut -c1-3
echo "$trust"
if ["$trust" = 'BAT']; then
${j} = 'BAT'
fi
build_files ${j}
done
done
我发现的代码trust=echo "$filename" | cut -c1-3
通过在计算器上另外一个问题,因为我是研究,但似乎并没有为我工作。我在echo
中加入了测试什么trust
持有,但它是空的。
我得到2个错误回:17 线 - BATTESTFILE:找不到 线19 - 测试:]缺少
对不起,长篇大论的问题。希望它包含有用的信息并显示我已采取的步骤。有任何问题,请发表评论。任何帮助或指导,非常感谢。谢谢。
您使用的是哪个外壳?看起来像ksh。哪个版本?试试'ksh --version' – 2015-02-09 15:03:45