grep для файлов через другой список файлов

#bash #loops #while-loop #grep #find

#bash #циклы #цикл while #grep #Найти

Вопрос:

Я пытаюсь найти, вызываются ли некоторые классы Java в списке файлов сценариев, которые на самом деле вызываются в планировщике.

 while read j; do
    while read b; do
        #Read through job files
        if [ $(cat crontab.now *.sh | grep -c ./$b) == "1" ] ; then
            echo -e $j: $(cat $b | grep -c .$j) >> bash_output.txt
        fi
    done <UsedBash.txt
done <java_file_names.txt
  

Я хочу искать только имена файлов Java в скриптах, которые найдены хотя бы один раз в планировщике. Есть ли более эффективный способ сделать это без вложенных циклов while? Также я не думаю, что мой оператор if работает. Спасибо.

Комментарии:

1. Можете ли вы предоставить немного примеров ввода из соответствующих файлов?

2. Разобрался. В любом случае спасибо. Входные данные — это просто имена файлов, разделенные новыми строками.

Ответ №1:

Я не знаю, как вы действительно хотите это сделать, но, возможно, попробуйте это:

 while read j; do
    while read b; do
        [[ $(exec grep -c "/$b" crontab.now *.sh) -ge 1 ]] amp;amp; 
            echo -e  "$j: $(exec grep -c ".$j" "$b")" >> bash_output.txt
    done < UsedBash.txt
done < java_file_names.txt
  

Комментарии:

1. Исправлен код. В итоге imporvin на порядок меньше. Я разместил готовый код сверху. Спасибо за вашу помощь.

2. @HarishV Вы должны опубликовать готовый код в качестве ответа и принять его.

Ответ №2:

ОТВЕТИТЬ:

 input=$(cat UsedBash.txt | tr 'n' ' ')
  

while read j; do

 j=$(echo $j | sed -e 's/r//g')
#Read through job files
echo $j: $(cat $input | grep -c $j) >> bash_output.txt
  

done <java_file_names.txt