ksh:shell脚本,定期在目录中的所有文件中搜索字符串,避免重复

时间:2014-02-19 17:33:57

标签: file unix scripting grep ksh

我之前问了一个问题。 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个失败)包含此特定字符串。我的代码将显示先前创建的成功和失败文件的结果,而不是最近创建的文件。 我们将非常感谢您的快速反应。如果您需要任何其他信息,请随时。

提前致谢。

1 个答案:

答案 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