String processing to compare dates


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting String processing to compare dates
# 8  
Old 08-01-2011
This script should work but I haven't tested it thoroughly.
Code:
#!/usr/bin/env perl

use warnings;
use strict;

use constant PASSWD => 'htpasswd';
use constant GROUPS => 'htgroups';
use constant NEW    => '.new';

sub usage {
    die "Usage: $0 EXPDATE, where EXPDATE is in YYYY-MM-DD format"
}

usage if @ARGV != 1 or $ARGV[0] !~ /\d{4}-\d{2}-\d{2}/;

my $expdate = shift;
my %users;

# don't output expired users from PASSWD to PASSWD.NEW
# and remember them in %users

open my $fpasswd, '<', PASSWD or die $!;
open my $fpasswd_new, '>', PASSWD . NEW or die $!;

while (<$fpasswd>) {
    if (/^(\w+):.*\[exp:([\d-]+)\]/) {
        if ($2 lt $expdate) {
            $users{$1}++;
        } else {
            print $fpasswd_new $_;
        }
    } else {
        print $fpasswd_new $_;
    }
}

close $fpasswd;
close $fpasswd_new;

# remove users from %users from records of GROUPS file
# and don't output the records to GROUPS.NEW where no more users

# records in GROUPS should be separated by blank lines

open my $fgroups, '<', GROUPS or die $!;
open my $fgroups_new, '>', GROUPS . NEW or die $!;

local $/;
$/="";

# not very robust but this may be enough
while (<$fgroups>) {
    for my $user (keys %users) {
        s/$user//;
    }
    s/ +/ /g;   # here may appear extra spaces so squash them
    s/ +$//gm;

    print $fgroups_new $_ if !/^[^#]\w+:\s*$/m;
}

close $fgroups;
close $fgroups_new;


Last edited by yazu; 08-01-2011 at 02:49 AM..
# 9  
Old 08-01-2011
Quote:
Originally Posted by yazu
This script should work but I haven't tested it thoroughly.
Code:
#!/usr/bin/env perl

use warnings;
use strict;

use constant PASSWD => 'htpasswd';
use constant GROUPS => 'htgroups';
use constant NEW    => '.new';

sub usage {
    die "Usage: $0 EXPDATE, where EXPDATE is in YYYY-MM-DD format"
}

usage if @ARGV != 1 or $ARGV[0] !~ /\d{4}-\d{2}-\d{2}/;

my $expdate = shift;
my %users;

# don't output expired users from PASSWD to PASSWD.NEW
# and remember them in %users

open my $fpasswd, '<', PASSWD or die $!;
open my $fpasswd_new, '>', PASSWD . NEW or die $!;

while (<$fpasswd>) {
    if (/^(\w+):.*\[exp:([\d-]+)\]/) {
        if ($2 lt $expdate) {
            $users{$1}++;
        } else {
            print $fpasswd_new $_;
        }
    } else {
        print $fpasswd_new $_;
    }
}

close $fpasswd;
close $fpasswd_new;

# remove users from %users from records of GROUPS file
# and don't output the records to GROUPS.NEW where no more users

# records in GROUPS should be separated by blank lines

open my $fgroups, '<', GROUPS or die $!;
open my $fgroups_new, '>', GROUPS . NEW or die $!;

local $/;
$/="";

# not very robust but this may be enough
while (<$fgroups>) {
    for my $user (keys %users) {
        s/$user//;
    }
    s/ +/ /g;   # here may appear extra spaces so squash them
    s/ +$//gm;

    print $fgroups_new $_ if !/^[^#]\w+:\s*$/m;
}

close $fgroups;
close $fgroups_new;

Works amazingly. Thank you so much
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Compare Dates.

Hi All, I am entering StartDate and EndDate as parameters to script. Want to have an check saying, "If StartDate is greater than EndDate then don't execute the script". Pseudo Code: if then Execute script else exit 0 fi Can you please help me on the same? Thanks and... (4 Replies)
Discussion started by: Nagaraja Akkiva
4 Replies

2. HP-UX

Compare dates

Hi, I want to convert two datetime fields to find out if the difference is one hour, in linux I've done this by converting both the datetime values to unix epoch time and subtracting them to find out if the difference is more than 3600s, however this does not work in hp-ux. I've these... (3 Replies)
Discussion started by: Random_Net
3 Replies

3. Shell Programming and Scripting

The Best Way to Compare Dates

Hi to all. When you have to compare a lot of dates in a SH code, there is a way to directly compare? For example, how can I check if two dates differ in less than a week? Thank's for reading. (2 Replies)
Discussion started by: daniel.gbaena
2 Replies

4. Shell Programming and Scripting

compare dates

I want to compare a list of dates in a file with today's date & list only dates that are less than only 60 days old . please help . the date in the file are in format 11-FEB-2009 02-FEB-2009 26-JAN-2009 24-JAN-2009 13-JAN-2009 16-DEC-2008 10-DEC-2008 01-DEC-2008 25-NOV-2008 19-NOV-2008... (3 Replies)
Discussion started by: skamal4u
3 Replies

5. Shell Programming and Scripting

compare between the two dates

Hi all, How to check whether the given the two dates is minimal. example: Date 1 : 23-03-2008 with timestamp Date 2: 20-03-2008 With tmestamp I want to compare the twodates and which it gives the minimum date i wnat to get the output like this below output: the Date2 is... (1 Reply)
Discussion started by: balaji23_d
1 Replies

6. Shell Programming and Scripting

How to compare the dates..

Hi all, I've written a script which gives the below information... End Date&Time: 2008-10-21 10.54.37 Now i want to calculate this time with the current time.. and if its more than 48 hours past with the current time it should echo "48 Hours back" Please help me.. thanks in... (4 Replies)
Discussion started by: suri.tyson
4 Replies

7. Shell Programming and Scripting

compare dates...

hi all :) how can in compare yyyy/dd/mm with yyyy/dd/mm in perl i want the result like grater than or less than the given date... thanks in advance (3 Replies)
Discussion started by: i_priyank
3 Replies

8. Programming

How to compare dates in C/C++

Hi, Is there any system defined function to compare two dates in C/C++? Thanks (1 Reply)
Discussion started by: naan
1 Replies

9. Programming

How to compare two dates

Hi I am writing a unix program. In that, i should compare two dates. I would like to know how to compare two dates in unix-whether they are same or not. pls help (5 Replies)
Discussion started by: bankpro
5 Replies

10. Shell Programming and Scripting

compare two dates

I have a log file with date format like 10-Oct-02 13:20:29 ..... at the beginning of each line in the log file, and I need to grep data from this file to list the lines with date no longer than one days. I tried to use awk to do this but it looks very complicated to do it. Is there... (6 Replies)
Discussion started by: wchen
6 Replies
Login or Register to Ask a Question