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.
$ cat 13months_ago
#! /usr/bin/ksh
for input in 20071115 20071105 20070105 ; do
year=${input%????}
day=${input#??????}
month=${input#????}
month=${month%??}
month=${month#0}
day=${day#0}
print -n $input $year $month $day
((year=year-1))
((month=month-1))
if ((!month)) ; then
((year=year-1))
month=12
fi
typeset -Z2 newday newmonth
newday=$day
newmonth=$month
output=${year}${newmonth}${newday}
print -- " -->" $year $month $day $output
done
exit 0
$ ./13months_ago
20071115 2007 11 15 --> 2006 10 15 20061015
20071105 2007 11 5 --> 2006 10 5 20061005
20070105 2007 1 5 --> 2005 12 5 20051205
$
Perderabo, thanks but your example didn�t works for me.
but I found the solution:
in my main program I calculate 13 months ago
hoje=`date +%Y%m%d`
data_13m=`expr ${hoje} - 10200`
and then, I've send the variable data_13m to the file.scl
export PAR_SCL3=${data_13m}
in the file.scl I did:
.
.
/EXECUTE "$PAR_SCL3"
/INFILE=$PAR_SCL1
/FIELD=(CONTA_CORRENTE, POSITION=1, SIZE=13)
/FIELD=(DATA_VENCIMENTO, POSITION=50, SIZE=10)
/CONDITION=(cond1, TEST=(DATA_VENCIMENTO > $PAR_SCL3 ))
and it worked !
by.
You are in effect subtracting 1 year and 2 months from the date. If that is your defintion of "13 months ago", you could change my script to
((month=month-2))
if ((month<1)) ; then
Note that your method will fail if the original date is in january or february.