さて、さまざまなログファイルをさまざまな列と値で解析するためのスクリプトがあります。私はgetoptsを使用して、スクリプトが1つのディレクトリ内のファイルに対して解析を実行し、出力を別のディレクトリに保存できるようにしています。基本的にコマンドは(あるべき)である:現在getoptsを使用したBashスクリプト - 引数としてディレクトリを使用してください
./script.sh -i /absolute/input/dir/ -o /absolute/output/dir/
、スクリプトはログファイルとディレクトリにある場合、それは
がオンベース、各ファイルの最初の4と最後の4をチェックしますこれらの結果は特定の方法でファイルを解析し、 は割り当てられた出力ディレクトリに変更を出力し、 は次のファイルに移動して終了します。
ここで、スクリプトをログディレクトリの外に移動すると、ファイルに対して何らかの操作を実行できないようです。ここで
は、私のコードの例です:
#!/bin/bash
while getopts ":i:o:" opt; do
case $opt in
i)
indir="$OPTARG"
;;
o)
outdir="$OPTARG"
;;
\?)
echo "invalid option"
exit 0
esac
done
shift $((OPTIND-1))
for f in *.log
do
shopt -s nocasematch
f4l4="${f:0:4}${f:${#f}-4}"
if [[ "${f4l4}" = "this.log" ]]; then
tr -cd "[:print:]\n" < $f | awk -F, 'BEGIN{OFS=FS}for(i=6,i<8;i++) $i=sprintf(%02X,$i)}1' > $outdir$f.csv
sed -i '1icolumn1,column2,column3,column4,5,6,7,8,etc' $outdir$f.csv
elif [[ "${f4l4}" = "that.log" ]]; then
parse log file another way < $f | sed this and that > $outdir$f.csv1
fi
done
は、だから私は、for文の中に($indir$f instead of $f
を)$indir
変数を使用して試してみましたが、それは動作しませんでした。私がecho $f
なら、ディレクトリ内のすべてのファイルを見ることができますが、スクリプトは何もしません。
つまり、編集するファイルが入っている入力ディレクトリと、保存する編集したファイルの出力ディレクトリを指定するためにgetoptsを使いたいとします。
思考?
'indir = "$ OPTARG"。 cd "$ indir"; ....? \ n "<$ indir/$ f'のように、dirとファイルの間に'/'を追加する必要があります。 '$ outdir/$ f'と同じです。がんばろう。 – shellter