awk command in hp UNIX subtract 30 days automatically from current date without date illegal option


 
Thread Tools Search this Thread
Operating Systems HP-UX awk command in hp UNIX subtract 30 days automatically from current date without date illegal option
# 8  
Old 12-24-2018
@Bakunin: that looks like a neat trick. It does not seem to work on HP-UX, however (max 24 hours)...
It appears to only work on AIX and IRIX to the full extent.

I found the following maximum time shifts using the date utility with the TZ variable...
Code:
AIX:     Works (No limit)
IRIX:    Works (No Limit)
Tru64:   Max. 7 days
Solaris: Max. 7 days (using /usr/xpg4/bin/date)
MacOS:   Max. 7 days
HP-UX:   Max. 1 day
Linux:   Max. 1 day

Of course on Linux one would not need the trick since it has GNU date...

Last edited by Scrutinizer; 12-24-2018 at 12:29 PM..
# 9  
Old 12-24-2018
well... you can convert everything to epoch and do math with epoch.

E.g. as a starter...
Code:
echo '2012-07-26 15:00:00' | awk -F'[- :]' -v now="$(date +%s)" '{timeE= $2*2629743 + $3*86400 + ($1-1970)*31556926 +$4*3600 +$5*60+$6; printf("%d - %d=%d\n", now, timeE}'

# 10  
Old 12-24-2018
Yes, but +%s is GNU and BSD date only.
So IMO on HP-UX the best bet appears to be perl again:
Code:
perl -le 'print time'


Last edited by Scrutinizer; 12-24-2018 at 02:42 PM..
# 11  
Old 12-25-2018
If one were to create a sample input file named myname.dat containing:
Code:
2018-12-24'0 days ago
2018-12-17'7 days ago
2018-12-10'14 days ago
2018-12-03'21 days ago
2018-11-26'28 days ago
2018-11-25'29 days ago
2018-11-24'30 days ago
2018-11-23'31 days ago
2018-11-22'32 days ago
2018-11-21'33 days ago
2018-11-20'34 days ago
2018-11-19'35 days ago
2018-11-12'42 days ago
2018-11-05'49 days ago

and one were to create a utility named now-30days from the C source file now-30days.c:
Code:
#include <stdio.h>
#include <time.h>

#define SecondsPerDay ((time_t)24 * 60 * 60)

int main(void) {
	time_t		Target = time(NULL) - 30 * SecondsPerDay;
	char		TargetString[16];
	struct tm	*Target_tm = localtime(&Target);

	strftime(TargetString, sizeof(TargetString), "%Y-%m-%d", Target_tm);
	printf("%s\n", TargetString);
}

using the command:
Code:
make now-30days

and moving the resulting utility into a directory named in your $PATH environment variable, then the awk command:
Code:
awk -v t="$(now-30days)" -F "'" '$1 < t' myname.dat

if run in the directory containing myname.dat might produce the output:
Code:
2018-11-23'31 days ago
2018-11-22'32 days ago
2018-11-21'33 days ago
2018-11-20'34 days ago
2018-11-19'35 days ago
2018-11-12'42 days ago
2018-11-05'49 days ago

if that command were run on December 24, 2018 (like I did here a few minutes ago).

Is this what you were trying to do?

I don't believe there is anything in this that is not available on all UNIX (including HP-UX), BSD, and Linux systems. It should do some error checking on the returns from localtime(), printf(), and strftime(), but this might give you a starting point for whatever you're trying to do.
This User Gave Thanks to Don Cragun For This Post:
# 12  
Old 12-25-2018
Quote:
Originally Posted by Scrutinizer
Yes, but +%s is GNU and BSD date only.
So IMO on HP-UX the best bet appears to be perl again:
Code:
perl -le 'print time'

Oh, I didn't know that.
Then another alternative with awk:
Code:
echo '2012-07-26 15:00:00' | awk -F'[- :]'  '{srand();now=srand(); timeE= $2*2629743 + $3*86400 + ($1-1970)*31556926 +$4*3600 +$5*60+$6; printf("%d - %d=%d\n", now, timeE}'

# 13  
Old 01-21-2019
I want to awk data from a log file with dates thus want to filter 30 days before the system date
Code:
awk -v t="$(date --date="-30days" +%Y-%m-%d)" -F "'" '$1 < t' myname.dat

but that returns an error


Moderator's Comments:
Mod Comment Pls. use CODE tags!

Last edited by RudiC; 01-21-2019 at 09:44 AM.. Reason: Added code tagas.
# 14  
Old 01-21-2019
Quote:
Originally Posted by kmarcus
... but that returns an error

Ooookay - mind to tell us WHAT error?
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Subtract a file's modification date with current date

SunOS -s 5.10 Generic_147440-04 sun4u sparc SUNW,SPARC-Enterprise Hi, In a folder, there are files. I have a script which reads the current date and subtract the modification date of each file. How do I achieve this? Regards, Joe (2 Replies)
Discussion started by: roshanbi
2 Replies

2. UNIX for Beginners Questions & Answers

Subscribers with Date 90 days older than current date

I have to display only those subscribers which are in "unconnected state" and the date is 90 days older than today's date. Below command is used for this purpose: cat vfsubscriber_20170817.csv | sed -e 's/^"//' -e '1d' | nawk -F '",' '{if ( (substr($11,2,4) == 2017) && ( substr($11,2,8) -lt... (1 Reply)
Discussion started by: dia
1 Replies

3. Shell Programming and Scripting

Seven days past date from current date

hi all.. i want 2 know how 2 find 7days past date from current date.. when i used set datetime = `date '+%m%d%y'` i got 060613.. i just want to know hw to get 053013.. i tried using date functions but couldnt get it :( i use c shell and there is no chance that i can change that ..... (3 Replies)
Discussion started by: Rahul619
3 Replies

4. Shell Programming and Scripting

Number of days between the current date and user defined date

I am trying to find out the number of days between the current date and user defined date. I took reference from here for the date2jd() function. Modified the function according to my requirement. But its not working properly. Original code from here is working fine. #!/bin/sh... (1 Reply)
Discussion started by: hiten.r.chauhan
1 Replies

5. Shell Programming and Scripting

How to Get 60 days Old date from current date in KSH script

Hi i am writing a cron job. so for it i need the 60 days old date form current date in variable. Like today date is 27 jan 2011 then output value will be stote in variable in formet Nov 27. i am using EST date, and tried lot of solution and see lot of post but it did not helpful for me. so... (3 Replies)
Discussion started by: Himanshu_soni
3 Replies

6. Shell Programming and Scripting

date: illegal option -- d in sun solaris

Hi all, I am trying to execute the following command in a sun solaris machine and getting the error as below. bash-2.03$ date -d "1 day ago" +%Y%m%d date: illegal option -- d bash-2.03$ uname -a SunOS gtrd02 5.8 Generic_117350-55 sun4u sparc SUNW,Sun-Fire-V440 Can anybody help me to... (1 Reply)
Discussion started by: Tuxidow
1 Replies

7. Shell Programming and Scripting

Date after 5 days from current date in YYYYMMDD format

Hello Experts, How do i get date after 5 days from current date in YYYYMMDD format? How do you compare date in YYYYMMDD format? Thanks (8 Replies)
Discussion started by: needyourhelp10
8 Replies

8. Shell Programming and Scripting

how to get what date was 28 days ago of the current system date IN UNIX

Hi, Anybody knows how to get what date was 28 days ago of the current system date through UNIX script. Ex : - If today is 28th Mar 2010 then I have to delete the files which arrived on 1st Mar 2010, (15 Replies)
Discussion started by: kandi.reddy
15 Replies

9. Solaris

date -d illegal option in Solaris

Hi All, Is it possible to run date -d option in Solaris? Do we have a work around so that -d option will be recognized by solaris as it is recognized by linux. I need this since i am using this in scripting and it works in Linux box. my problem is it doesn't work in solaris box. ... (6 Replies)
Discussion started by: linuxgeek
6 Replies

10. Shell Programming and Scripting

How to find a date which is 7 days past when given current date

hii all. I have to get the date of the 7th day past from the current date. if i give the current date as sep 3 then i must get the date as 27th of august. can we get the values from the "cal" command. cal | awk '{print $2}' will this type of command work. actually my need is if today is... (17 Replies)
Discussion started by: ladtony
17 Replies
Login or Register to Ask a Question