hi,
I have a big file that contains datas since 4 years ago.
I need re-create this file but just lines that are 13 months ago from today.
see what I have: ( I have a file.ksh that calls this file.scl ok !!)
======== file.scl ================
/STATISTICS=stderr
/STABLE
/NODUPLICATES
/EXECUTE " today=`date +%Y%m%d` "
/EXECUTE " 13m_ago=`expr ${today} - 10000` "
/INFILE=$PAR_SCL1
/FIELD=(CONTA_CORRENTE, POSITION=1, SIZE=13)
/FIELD=(DATA_VENCIMENTO, POSITION=50, SIZE=10)
/CONDITION=(cond1, TEST=(DATA_VENCIMENTO > ($13m_ago) )
/INCLUDE=(CONDITION=cond1)
/KEY=(NUMERO_FATURA, ASCENDING)
/OUTFILE=$PAR_SCL2
/FIELD=(CONTA_CORRENTE, POSITION=1, SIZE=13)
/FIELD=(DATA_VENCIMENTO, POSITION=50, SIZE=10)
============================================
"DATA_VENCIMENTO" is the date that have to be in the maximum equal 13 months ago.
the layout of DATA_VENCIMENTO is 20071115 , for exemple.
I've already see the topic ( http://www.unix.com/answers-frequently-asked-questions/13785-yesterdays-date-date-arithmetic.html\ ) but it didn't help me ...
My Unix is Solaris.
does somebody can help ?
thanks , Andrea. [ 16/11/2007 ]
It's a bit ugly but:
sh/bash/ksh etc
month=`date +%m`
day=`date +%M`
year=`date +%Y`
count=13
while [ $count -gt 0 ]
do
count=`expr $count - 1`
month=`expr $month - 1`
if [ $month -lt 1 ]
then
month=12
year=`expr $year -1`
fi
done
compare_date="${year}${month}${day}"
while <***read the file***>
do
if [ $DATA_VENCIMENTO -lt $compare_date ]
then
<***do stuff***>
fi
done
Ygor
November 18, 2007, 10:07pm
3
Umm... that could return an invalid date when run at the end of a "long" month. For example, run date is 20071231, code returns 20061131
hi, thanks 4 the answers, but I could resolve in a better simple way :
in my main program I did :
.
.
.
hoje=`date +%Y%m%d`
data_13m=`expr ${hoje} - 10200`
export PAR_SCL3=${data_13m}
EXECUTA "sortcl /sp=${DIR_PROG_SCL}/saida_13meses.scl" \
and in the saida_13meses.scl I did :
/EXECUTE "$PAR_SCL3"
/INFILE=$PAR_SCL1
/FIELD=(CONTA_CORRENTE, POSITION=1, SIZE=13)
/FIELD=(NUMERO_FATURA, POSITION=14, SIZE=14)
/FIELD=(DATA_VENCIMENTO, POSITION=50, SIZE=10)
/CONDITION=(cond1, TEST=(DATA_VENCIMENTO > $PAR_SCL3 ))
/INCLUDE=(CONDITION=cond1)
bye
That shouldn't matter though, we don't want to know a nice calander date 13 months ago, we want to find stuff older than that to flag.