複数のログファイルを読み取り、特定の文字列を含む行を検索するスクリプトを作成しています。ただし、ファイルを egrep/grep しようとするとエラーが発生します。
読みたいログファイルの名前を含むファイルがあります(下記参照)。
ファイル.txt
./code_a.log
./code_b.log
ログ分析.ksh
#!/bin/ksh
platform=$1
lw_platform=$(echo "$platform" | tr '[:upper:]' '[:lower:]')
log_dir="/project/$lw_platform/logs/"
read_file="/user/LogAnalysis/files.txt"
out_file="/user/LogAnalysis/out3.txt"
echo $lw_platform
echo $log_dir
while -r line; do
echo "Began: $line" >> $out_file
cd ${log_dir}
echo $(pwd)
egrep -n 'ERROR:' $line >> $out_file
echo "End: $line" >> $out_file
done < $read_file
コンソール出力
test
/project/test/logs/
/project/test/logs
.grep: 0652-033 Cannot open ./code_a.log
egrep
ただし、シェルで同じコマンドを直接実行しても、このエラーは発生しません。ファイルを読み取る権限があることを証明してください。
答え1
ファイルをdos行の末尾からUNIX形式に変換することで問題を解決しました。次のコマンドを使用しました。
dos2unix files.txt