2014-02-19 18 views
0

Я задал вопрос раньше. Link на этот вопрос.ksh: скрипт оболочки для поиска строки во всех файлах, присутствующих в каталоге с регулярным интервалом, и избежать повторения

Проблема, с которой я столкнулся сейчас, состоит в том, что искомая строка может присутствовать в нескольких количествах файлов успеха/отказа, а сценарий отображает результат из ранее сгенерированных файлов. Моя задача - выбрать последние файлы (успех и сбой) только из каталога и отобразить результат. код из предыдущего решаемый вопрос:

#!/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 в этих двух файлах в качестве первой строки. До тех пор, пока файл 140127_123933.csv, указанный для обработки задачи P1, уникален, мой код работает нормально. Но проблема возникает, когда один и тот же файл 140127_123933.csv обрабатывается заданием P1 через некоторое время. Теперь есть всего 4 файла (2 успеха и 2 сбой), которые содержат эту конкретную строку. Мой код отобразит результат из ранее созданных файлов успеха и сбоя, а не из недавно созданных файлов. Быстрый ответ с вашей стороны будет высоко оценен. Пожалуйста, не стесняйтесь, если вам нужна какая-либо другая информация.

Заранее спасибо.

ответ

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