这是autosys中的作业列表。我要做的是确保PROD中的每个工作都有一个伴随的BACKUP工作。 作业格式为 CAPSER_JOB_01_PP 。我把列表读成了一个while循环,不知道我是否应该选择 “ - r” 我从作业名称中取出最后两个字符,然后为每个区域grep两次,如果两者都成功,则在行的开头打印是,否则为no。 坦率地说,我找不到 $ {job%??} 的匹配文档。我不知道这两个问号代表什么。 我尝试使用 grep -q ,但现在确实有效。 > 2>& 1 / dev / null 不起作用,我不得不将其反转为> / dev / null 重定向 2>& 1 (如图所示)脚本有效,它只是一种笨重的方式来完成它。一定有更好的方法。
#!/bin/bash
#bash, version 3.2.25
IFS=,
while read area job machine script
do
if grep ${job%??} /home/first_spreadsheet.txt | grep BACKUP >/dev/null 2>&1 && grep ${job%??} /home/first_spreadsheet.txt | grep PROD >/dev/null 2>&1 ; then
echo " YES $area $job $machine $script "
else
echo " NO $area $job $machine $script "
fi
sleep 1
done < /home/first_spreadsheet.txt
cat /home/first_spreadsheet.txt
BACKUP, CAPSER_JOB_01_PP, usa-penguin.com, /bin/bash -lc '/usr/bin/run.sh'
PROD, CAPSER_PROD_JOB_01_PS, usa-penguin.com, /bin/bash -lc '/usr/bin/run.sh'
BACKUP, CAPSER_JOB_02_PP, usa-penguin.com, /bin/bash -lc '$HOME/run/script02'
PROD, CAPSER_PROD_JOB_02_PS, usa-penguin.com, /bin/bash -lc '$HOME/run/script02'
BACKUP, CAPSER_JOB_03_PP, usa-penguin.com, /bin/bash -lc '$HOME/run/script03'
PROD, CAPSER_PROD_JOB_03_PS, usa-penguin.com, /bin/bash -lc '$HOME/run/script03'
BACKUP, CAPSER_JOB_04_PP, usa-penguin.com, /bin/bash -lc '$HOME/run/script04'
PROD, CAPSER_PROD_JOB_04_PS, usa-penguin.com, /bin/bash -lc '$HOME/run/script04'
PROD, CAPSER_PROD_JOB_05_PS, usa-penguin.com, /bin/bash -lc '$HOME/run/script05'
PROD, CAPSER_PROD_JOB_06_PS, usa-penguin.com, /bin/bash -lc '$HOME/run/script06'
BACKUP, CAPSER_JOB_07_PP, usa-penguin.com, /bin/bash -lc '$HOME/run/script07'
PROD, CAPSER_PROD_JOB_07_PS, usa-penguin.com, /bin/bash -lc '$HOME/run/script07'
答案 0 :(得分:1)
你应该避免循环。你可以从
开始sort -k3 /home/first_spreadsheet.txt | uniq -c
或
grep PROD /home/first_spreadsheet.txt |
grep -vf <(sed -rn '/^BACKUP/ s/^[^,]*,[^,]*,//p' /home/first_spreadsheet.txt)
或
awk -F, '{a[$3","$4]+=1}
END {for (key in a)
{print key ": " a[key] " time(s)"}
}
' /home/first_spreadsheet.txt