使用grep quiet进行BASH while循环

使用grep quiet进行BASH while循环,bash,while-loop,grep,Bash,While Loop,Grep,这是autosys中的作业列表。我要做的是确保PROD中的每个作业都有一个备份作业。 作业的格式为CAPSER_JOB_01_PP。我将列表读入了while循环,不确定是否应该使用-r 我去掉作业名称的最后两个字符,然后对每个区域进行两次grep,如果两者都成功,则在行首打印“是”,否则为“否”。 坦白地说,我找不到与${job%??}匹配的文档。我不知道这两个问号代表什么。 我试着使用grep-q,但现在它确实起作用了。>2>&1/dev/null不起作用,我不得不将其反转为>/dev/nul

这是autosys中的作业列表。我要做的是确保PROD中的每个作业都有一个备份作业。 作业的格式为CAPSER_JOB_01_PP。我将列表读入了while循环,不确定是否应该使用-r 我去掉作业名称的最后两个字符,然后对每个区域进行两次grep,如果两者都成功,则在行首打印“是”,否则为“否”。 坦白地说,我找不到与${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'

你应该避免循环。你可以从

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)

这里有什么问题?如果它工作,你只是想改进它,你可以考虑在那里有一个更好的方法来证明一个工作存在于两个地方,除了一个双GRIP?为什么你把GNU版权通知在你的脚本?我会去代码审查。
awk -F, '{a[$3","$4]+=1}
         END {for (key in a)
                {print key ": " a[key] " time(s)"}
             }
        ' /home/first_spreadsheet.txt