我正在运行一些实验,会将结果输出到相应的文件中,如果实验成功,文件中会有completed all
的文本,我想输出实验不成功的情况,即文件中不存在“全部完成”语句,不同的实验结果可以通过文件名来区分。使用ls
可以得到所有的文件,使用grep
可以得到成功的文件,减法可以得到失败的文件名。
但我发现,所有的文件名总是输出.
1.当我使用两个简单数组进行验证时,结果是正确的。这表明减法函数是正确的。
1.当我单独输出所有文件名,或者输出正确的文件名时,输出也是正确的。
1.但是下面的代码在一起运行时会输出所有的文件名。
CURRENT_DIR=$(cd $(dirname $0); pwd)
ChampSim_path=$CURRENT_DIR/..
cd $CURRENT_DIR/$1
all=$(ls -q * | wc -l)
good=$(grep "ChampSim completed all CPUs" * | wc -l)
good_trace_prefetcher=($(grep -Rl "ChampSim completed all CPUs" * ))
all_trace_prefetcher=($(ls -q * ))
# echo ${good_trace_prefetcher[@]}
# echo ${all_trace_prefetcher[@]}
# exit
# arry_list1=(1 2 3 4 5 6 7 8 9)
# arry_list2=(3 5 8)
arry_list1=${all_trace_prefetcher[@]}
arry_list2=${good_trace_prefetcher[@]}
declare -a diff_list
t=0
flag=0
# echo arry_list1=${arry_list1[@]}
# echo arry_list2=${arry_list2[@]}
for list1_num in "${arry_list1[@]}"
do
# echo list1_num is ${list1_num}
for list2_num in "${arry_list2[@]}"
do
# echo list2_num is ${list2_num}
if [[ "${list1_num}" == "${list2_num}" ]]; then
flag=1
break
fi
done
if [[ $flag -eq 0 ]]; then
diff_list[t]=$list1_num
t=$((t+1))
else
flag=0
fi
done
echo diff_list=${diff_list[@]}
1条答案
按热度按时间gxwragnw1#
您考虑过
grep -vl 'searchstring' files
吗?(或者如果您想要不区分大小写的匹配,则考虑-vil
)。示例: