我之前问了一个问题。 Link这个问题。
我现在面临的问题是搜索到的字符串可以存在于多个成功/失败文件中,并且脚本显示先前生成的文件的结果。我的任务是从目录中选择最新文件(成功和失败) 并显示结果。 以前解决的问题的代码:
#!/usr/bin/ksh
file_name="140127_123933.csv"
for i in 1 2
do
grep -l $file_name /osp/local/var/log/tool2/final_logs/* >log_t.txt;
while read line
do
if [ $(echo "$line" |awk '/success/') ] ## will check the success file
then
CNT_SUCC=`wc -l $line|tr -s " "|cut -d" " -f2`
CNT_SUCC=`expr $CNT_SUCC - 1`
fi
if [ $(echo "$line" |awk '/fail/') ] ## will check the fail file
then
CNT_FAIL=`wc -l $line|tr -s " "|cut -d" " -f2`
CNT_FAIL=`expr $CNT_FAIL - 1`
fi
done <log_t.txt
if [ $CNT_SUCC > 0 ] && [ $CNT_FAIL > 0 ]
then
echo " Fail count = $CNT_FAIL"
echo " Success count = $CNT_SUCC"
exit
fi
echo "waitng for next search..."
sleep 10
done
final_logs目录包含结果文件,由另一个任务 P1 通过处理此 140127_123933.csv 类型的文件生成。 实际上P1处理文件 140127_123933.csv 并将结果转储到final_logs目录中的两个不同文件(成功和失败)。进程P1将 140127_123933.csv 名称转储到这两个文件中作为第一行。 只要给进程到任务P1的 140127_123933.csv 文件是唯一的,我的代码就可以正常工作了。但是,一段时间后,任务P1再次处理相同的文件 140127_123933.csv 时会出现问题。现在共有4个文件(2个成功,2个失败)包含此特定字符串。我的代码将显示先前创建的成功和失败文件的结果,而不是最近创建的文件。 我们将非常感谢您的快速反应。如果您需要任何其他信息,请随时。
提前致谢。
答案 0 :(得分:0)
我不明白为什么你要循环两次。您可以减少该代码(忽略外部循环)
#!/usr/bin/ksh
search_name="140127_123933.csv"
cnt_success=0
cnt_fail=0
for file in /osp/local/var/log/tool2/final_logs/*; do
if [[ "$(head -1 "$file")" == "$search_name" ]];
case "$file" in
*success*) (( cnt_success++ )) ;;
*fail*) (( cnt_fail++ )) ;;
esac
fi
done