We help IT Professionals succeed at work.

Date Calculations in ksh script

small
small asked
on
264 Views
Last Modified: 2013-12-26
I need to take x days away from todays date and then
compare this with dates from a file?

Comment
Watch Question

small,

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...


Author

Commented:
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.

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...


Author

Commented:
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.


ozo
CERTIFIED EXPERT
Most Valuable Expert 2014
Top Expert 2015

Commented:
What is the format of the dates in the file?

Author

Commented:
ozo,

They are in the format of MM/DD/YY.

Once I get a script working, I will tackle the YY not YYYY problem.
ozo
CERTIFIED EXPERT
Most Valuable Expert 2014
Top Expert 2015

Commented:
perl -ne 'BEGIN{($d,$m,$y)=(localtime 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
ozo
CERTIFIED EXPERT
Most Valuable Expert 2014
Top Expert 2015

Commented:
#!/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

Author

Commented:
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

Author

Commented:
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

small,

reject my answer, then let ozo propose...

Larry

Author

Commented:
Ozo,

I have rejected the first answer.  Please answer so I can
grade your excellent response.

CERTIFIED EXPERT
Most Valuable Expert 2014
Top Expert 2015
Commented:
Unlock this solution and get a sample of our free trial.
(No credit card required)
UNLOCK SOLUTION

Author

Commented:
Excellent!!!!

Thanks Ozo

Jonathan
Unlock the solution to this question.
Thanks for using Experts Exchange.

Please provide your email to receive a sample view!

*This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

OR

Please enter a first name

Please enter a last name

8+ characters (letters, numbers, and a symbol)

By clicking, you agree to the Terms of Use and Privacy Policy.