Проблема в том, что ваш egrep
поиск будет вызывать awk
один раз для каждой строки, в которой он видит «28», «29», «30» или «31». . В месяцах, где 28-е число находится перед последней календарной неделей, awk
вызывается дважды, так как две строки соответствуют критериям поиска.
Вы хотите всегда использовать вторую строку поиска egrep
, поэтому вы можете использовать команду tail
, чтобы увидеть только последнюю строку:
#!/bin/bash
#!/usr/local/bin
#!/usr/sbin
#!/usr/bin
# Script to Check last working Day of the Month
echo " Enter Month and Year :"
read mon year
cal $mon $year| egrep "28|29|30|31"| tail -n 1 |awk 'BEGIN {
var1=$NF;var2=NF;
}
{
if (NF > 1 && NF < 7)
val=$NF;
else if (NF == 1)
val=$NF-2;
else if (NF == 7)
val=$NF-1;
}
{
print "Last Working Date is : " val;
}'