ファイルを編集するには、sqlplusを介してbashスクリプトの変数をPerlステートメントに渡す必要があります。変数を渡さなくてもうまくいきますが、count
変数を渡すと問題が発生します。
count=$( sqlplus -s test/test <<-EOF
set pagesize 0;
set feedback off;
set verify off;
set heading off echo off;
select count(*) from test;
exit;
EOF)
if [ "$count" != "" ] && [ $count != "0" ]; then
perl -lpe 'print "Total Number of Rejected Files = "$count"" if $. == 10' Results.txt >> data.txt
else
fi
私が知る限り、私の問題はこの部分にのみあります"$count"
。私は次のような多くのことを試しました。
perl -lpe 'print "Total Number of Rejected Files = $ENV{'count'}" if $. == 10' Results.txt >> data.txt
これ:
perl -lpe 'print "Total Number of Rejected Files = $ENV{count}" if $. == 10' Results.txt >> data.txt
しかし、問題はbash変数がperlステートメントに拡張されないことです。
答え1
あなたの$ENV
方法はうまく動作します。まず、シェル変数をエクスポートします。 Perlスクリプトはサブシェルで実行されるため、変数を表示する唯一の方法は最初に変数をエクスポートすることです。
count=$( sqlplus -s test/test <<-EOF
set pagesize 0;
set feedback off;
set verify off;
set heading off echo off;
select count(*) from test;
exit;
EOF)
export count
if [ "$count" != "" ] && [ $count != "0" ]; then
perl -lpe 'print "Total Number of Rejected Files = $ENV{count}" if $. == 10' Results.txt >> data.txt
fi
しかし、私はあなたのperlコマンドについて少し混乱しています。perl -lpe '' Results.txt
「与えられたスクリプトを適用した後、Results.txtの各行を印刷しますが、-e
実際にResults.txtに何もしません。
コードは単に各行を印刷してから、10行目の値Results.txt
も印刷します。それが本当にあなたがやりたいことなら本当にいいです。実際にこれをしたい場合はほとんどありません。Total Number of Rejected Files =
$count