small
asked on
Date Calculations in ksh script
I need to take x days away from todays date and then
compare this with dates from a file?
compare this with dates from a file?
ASKER
Thank you for the quick response
Sorry, here is some more info..
I trying to work out 60 days from today and then comparing that
date with a list of dates from a file, not the date of a file.
i.e. a have a file which contains a list of user and their last
login date. I want to identify all the users who have not logged
in in the last 60 days.
Sorry, here is some more info..
I trying to work out 60 days from today and then comparing that
date with a list of dates from a file, not the date of a file.
i.e. a have a file which contains a list of user and their last
login date. I want to identify all the users who have not logged
in in the last 60 days.
small,
if they haven't logged in, then their .history file wouldn't have been accessed. assuming your users' accounts are under /users :
find /users -name '.history' -mtime +59
.will list all users' (history files) for users who haven't updated their history in 59 days or more...
if they haven't logged in, then their .history file wouldn't have been accessed. assuming your users' accounts are under /users :
find /users -name '.history' -mtime +59
.will list all users' (history files) for users who haven't updated their history in 59 days or more...
ASKER
The list of usernames and dates come from a central security
server which covers 20+ machines.
I run a report on the security server and it outputs to a file
all the user information including last login, last password
change and a load of other info.
I want to take this file and produce a list of users who have
not logged in during the last 60 days.
I can only do this from the report file because I will
not be able to run a script which goes onto each of the
systems.
TIA.
server which covers 20+ machines.
I run a report on the security server and it outputs to a file
all the user information including last login, last password
change and a load of other info.
I want to take this file and produce a list of users who have
not logged in during the last 60 days.
I can only do this from the report file because I will
not be able to run a script which goes onto each of the
systems.
TIA.
What is the format of the dates in the file?
ASKER
ozo,
They are in the format of MM/DD/YY.
Once I get a script working, I will tackle the YY not YYYY problem.
They are in the format of MM/DD/YY.
Once I get a script working, I will tackle the YY not YYYY problem.
perl -ne 'BEGIN{($d,$m,$y)=(localti me time-60*24*3600)[3,4,5]; $ymd=sprintf"%d%02d%02d",$ y+1900,$m+ 1,$d} print if m"(\d+)/(\d+)/(\d+)" && "19$3$1$2" lt $ymd' < file
#!/usr/bin/ksh
#or in pure ksh, assuming your system accepts large TZ offsets:
ymd=`TZ=ZZZ1440;date +%Y%m%d`
IFS=$IFS/
exec < file
while read m d y x ;do
if [[ "19$y$m$d" < "$ymd" ]] ;then
echo $m/$d/$y $x
fi
done
#or in pure ksh, assuming your system accepts large TZ offsets:
ymd=`TZ=ZZZ1440;date +%Y%m%d`
IFS=$IFS/
exec < file
while read m d y x ;do
if [[ "19$y$m$d" < "$ymd" ]] ;then
echo $m/$d/$y $x
fi
done
ASKER
ozo,
The ksh answer looks good.
Could you just give me a little more info on how the script works...
Thanks very much in advance.
Jonathan Small
The ksh answer looks good.
Could you just give me a little more info on how the script works...
Thanks very much in advance.
Jonathan Small
ASKER
ozo,
I figured out the script.
How do I score your answer because yor replied in comments
rather than answers, I think.
This is my first question here so I'm not quite up to speed
with the procecure.
Bye Bye
I figured out the script.
How do I score your answer because yor replied in comments
rather than answers, I think.
This is my first question here so I'm not quite up to speed
with the procecure.
Bye Bye
small,
reject my answer, then let ozo propose...
Larry
reject my answer, then let ozo propose...
Larry
ASKER
Ozo,
I have rejected the first answer. Please answer so I can
grade your excellent response.
I have rejected the first answer. Please answer so I can
grade your excellent response.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Excellent!!!!
Thanks Ozo
Jonathan
Thanks Ozo
Jonathan
take a look at the man pages for the find command. the command:
find . -mtime +10 -name '*.c'
will find all files which match *.c and have been modified greater than 10 days ago (whereas 10 would mean 'modified exactly 10 days ago', and -10 would mean 'modified less than 10 days ago).
of course, you could use a parameter to fill in the value of the number of days from the command line.
also, if you want to *do* something with the file(s) you find, you can use an -exec parm to the find command...