08-04-2004
file name using previous month
This has probably been asked 100 times, but I couldn't find any articles on point. I have a script that runs on the last day of every month at 11:30pm. If cats a number of input tables that were created the previous month (or earlier), combines them into one master file and erases the indivual files. It also compresses any master files from previous months. My problem is that if the script is run on August 31, it will take all the files from July, and make a master file with the name EKVI0804.DAT
What I want to do is a have it use the previous month (EKVI0704.DAT) for the file (since the files belong to July). Below is my current script. Any help would be appreciated.
==========================
#!/bin/ksh
# Because a cron job can not be told to run on the last day of a month,
# it will be run on the 28-31 of every month at 11:30pm. The following
# code will determine if we are on the last day of the month. Because a
# cron job doesn't have any environmental variables available from the
# submitting session, all paths need to be hard coded. If this job needs
# to be run for a gers production except live, please make the
# approporate modifications to the path names. The test will be for any
# file that was created before the current month.
days_in_month=$(echo $(cal) | awk '{print $NF}')
day_of_month=$(date +%d)
if [[ $days_in_month -eq $day_of_month ]]
then
touch -m -t `date +%Y%m`010000.01 /gers/live/adhoc/ekvidatetestfile
cd /gers/live/datafiles
find . \( ! -name . -prune \) -name "EKVI*\.DAT" -type f ! -newer /gers/live/adhoc/ekvidatetestfile -exec compress {} \;
cd /gers/live/adhoc
find . \( ! -name . -prune \) -name "EKVI*" -type f ! -newer /gers/live/adhoc/ekvidatetestfile -exec cat {} > /gers/live/datafiles/EKVI`date +%m%y`.DAT \;
find . \( ! -name . -prune \) -name "EKVI*" -type f ! -newer /gers/live/adhoc/ekvidatetestfile -exec rm {} \;
rm /gers/live/adhoc/ekvidatetestfile
else
echo not the last day of the month
exit
fi
9 More Discussions You Might Find Interesting
1. Shell Programming and Scripting
Hi,
My task to to delete files which are of previous months.
I have files named as follows *CCYYMMDD.xls. on a particular day i have delete previous months files
i.e in Dec i have delete all nov files which look like 200511DD.XLS
in Jan i have to delete all Dec files 200512DD.xls
... (7 Replies)
Discussion started by: savitha
7 Replies
2. Shell Programming and Scripting
Hi,
I want a script(ksh) to see if today is the last working day(Mon-Fri) of the month. If it is the last working day I need to print current date, else I need the last working day of previous month. Thanks in advance. (1 Reply)
Discussion started by: rspk_praveen
1 Replies
3. Shell Programming and Scripting
Hi, I'm new with Unix, I'm trying to get a last day of previous month with this format: %b %d %Y (example: Feb 25 2008).
Here is what I have so far.
#!/bin/ksh
cur_month=`date +%m`
cur_year=`date +%Y`
prev_month=$(($cur_month-1))
# Check to see if this is January
if
then
... (11 Replies)
Discussion started by: sirrtuan
11 Replies
4. Shell Programming and Scripting
Hello - I have one question regarding the date. I wanted to display the month name for previous day. The output should be as follows...
5-Feb-09 => February
1-Feb-09 => January
28-Feb-09=> February
Here is the code i am using to get the output....
date '+%m %d %Y' |
{
read MONTH DAY... (4 Replies)
Discussion started by: govindts
4 Replies
5. UNIX for Dummies Questions & Answers
Hello,
I'm new to shell scripting.
We've develop a script which will grep a file on the search criteria, MON (Jan/Feb/Mar/etc). But we should set this sript in cron which will run on every first day of the month. The problem I'm having is, when I run the script, it is displaying the contents of... (7 Replies)
Discussion started by: suneelj
7 Replies
6. Shell Programming and Scripting
Can someone help me creating a function which will give me previous months.
like for example if the date is 200902 and if i call my function and pass a parameter 2 i want to get 200812 as the answer.
or if i pass 200902 with a parameter 7 then my function should give me the date as 200807. (1 Reply)
Discussion started by: Lincy
1 Replies
7. UNIX for Dummies Questions & Answers
Hi folks
month=`date +%m`gives current month
Howto print previous month (current month minus 1) with Solaris date and ksh (7 Replies)
Discussion started by: slashdotweenie
7 Replies
8. UNIX for Dummies Questions & Answers
Hi All,
I am using the below code to get the year and month from date:
Below gives output like 201212.
dt=`date '+%Y%m'`
how do i get the previous month value(ie: subtract 1 from date)
example output:
dt=201211
Please help. :confused: (3 Replies)
Discussion started by: abhi_123
3 Replies
9. Shell Programming and Scripting
I have requirment to get last date of previous month and the first date of previous 4th month:
Example:
Current date: 20130320 (yyyymmdd)
Last date of previous month: 20130228 (yyyymmdd)
First date of previous 4th month: 20121101 (yyyymmdd)
In my shell --date, -d, -v switches are not... (3 Replies)
Discussion started by: machomaddy
3 Replies
LEARN ABOUT ULTRIX
crontab
crontab(5) File Formats Manual crontab(5)
Name
crontab - clock daemon table file
Syntax
/usr/lib/crontab
Description
The command executes at specified dates and times according to the instructions in the file. The file consists of lines with six fields
each. The format for a line is as follows:
minute hour day month weekday command
The following list defines each field in the line:
minute (0-59) The exact minute that the command sequence executes.
hour (0-23) The hour of the day that the command sequence executes.
day (1-31) The day of the month that the command sequence executes.
month (1-12) The month of the year that the command sequence executes.
weekday (1-7) The day of the week that the command sequence executes. Monday = 1, Tuesday = 2, and so forth.
command The complete command sequence variable that is to be executed. Note that the command string must conform to Bourne shell
syntax.
The first five integer fields may be specified as follows:
o A single number in the specified range
o Two numbers separated by a minus, meaning a range inclusive
o A list of numbers separated by commas, meaning any of the numbers
o An asterisk meaning all legal values
The sixth field is a string that is executed by the shell at the specified times. A percent sign (%) in this field is translated to a new-
line character. Only the first line of the command field, up to a percent sign (%) or end of line, is executed by the shell. The other
lines are made available to the command as standard input.
Examples
The following example is part of a file:
# periodic things
0,15,30,45 * * * * (echo '^M' `date`; echo '') >/dev/console
0,15,30,45 * * * * /usr/lib/atrun
# daily stuff
5 4 * * * sh /usr/adm/newsyslog
15 4 * * * ( cd /usr/preserve; find . -mtime +7 -a -exec rm -f {} ; )
20 4 * * * find /usr/msgs -mtime +21 -a ! -perm 444 -a ! -name bounds
-a -exec rm -f {} ;
# NOTE: The above line is wrapped.
# local cleanups
30 4 * * * find /usr/spool/mqueue -type f -mtime +5 -name df-exec rm {} ;
35 4 * * * find /usr/spool/mqueue -type f -mtime +5 -name tf-exec rm {} ;
40 4 * * * find /usr/spool/rwho -type f -mtime +21 -exec rm {} ;
#
# redirecting error output
0 17 * * 1,3,5 /bin/tar -cv /usr/sysads/smith > /dev/console 2>&1
#
Files
See Also
sh(1), cron(8)
Guide to System Environment Setup
crontab(5)