use*_*373 2 bash shell if-statement
说我的目录中有三个文件 dir
touch a.ym b.ym a.job
Run Code Online (Sandbox Code Playgroud)
*.ym如果没有相应的*.job文件,则需要打印所有内容。所以我尝试了
for file in $(find ${dir} -name \*.ym);do
filebase=$(basename $file)
sample_id=$(echo "${filebase}"| awk -F'[.]' '{print $1}')
if [[ $sample_id != *".job" ]]; then
echo "${file}"
fi
done
Run Code Online (Sandbox Code Playgroud)
但是,上述解决方案是同时打印出
a.ym b.ym文件,我只b.ym需要打印出文件
我赞扬您在使用您熟悉的工具方面的机智,但是您经常使用findand awk命令,而使用pure可以更轻松地完成它们bash。
尝试这个:
for ym_file in "${dir}"/*.ym; do
job_file="${ym_file/.ym/.job}"
if [[ ! -f "$job_file" ]]; then
echo "${ym_file} has no matching job file"
fi
done
Run Code Online (Sandbox Code Playgroud)
"${dir}"/*.ym:您可以直接在bash中使用全局匹配。如果您没有任何.ym文件,这将出错,但是在这种情况下它不会做任何坏事。"${ym_file/.ym/.job}":这是bash模式替换。它取代的所有实例.ym用.job。我认为这些模式只会在末尾显示在您的文件名中。[[ ! -f "$job_file" ]]:该-f标志会测试常规文件的存在,并将!其取反(因此测试是否存在常规文件)。