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
# 15  
Old 01-21-2019
Code:
date: illegal option -- -
Usage: date [-u] [+format]
       date [-u] [mmddhhmm[[cc]yy]]
       date [-a [-]sss.fff]

that is the error returned after I run the code
Code:
awk -v t="$(date --date="-30days" +%Y-%m-%d)"-F "" '$1 < t' myname.dat

on Unix ksh93
# 16  
Old 01-21-2019
There is an option in ksh to change the behaviour of ksh to accept latest posix ( or some ksh93 if not all... but no ways for me to test no more HP-UX...) e.g.
Code:
 UNIX95= ps -e -o pid,comm,pcpu|more

So you can always try UNIX95=... and your options, I suggest you have a look at the man pages as I cant having no more access...
# 17  
Old 01-21-2019
If you have perl there's my general purpose date script which is a GNU-date-alike which supports date math.
# 18  
Old 01-21-2019
What output do you get from the following commands when typed into a terminal window running ksh93:
Code:
ksh93 --version
ksh --version
date
printf '%(%Y-%m-%dT%H:%M:%S)T\n' "30 days ago"

This User Gave Thanks to Don Cragun For This Post:
# 19  
Old 01-21-2019
Quote:
Originally Posted by Don Cragun
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.
These time functions also exist in perl:
Code:
now_minus_30_days=$(perl -le 'use POSIX; print strftime ("%Y-%m-%d", localtime (time-30*24*60*60))')
awk -v t="$now_minus_30_days" -F "'" '$1 < t' myname.dat

# 20  
Old 01-21-2019
This is a method longhand, but I suspect it is not fully POSIX compliant.
OSX 10.14.1, default bash terminal.
Code:
Last login: Mon Jan 21 20:27:49 on ttys000
AMIGA:amiga~> less_days=30
AMIGA:amiga~> day_secs=$(( 24*60*60 ))
AMIGA:amiga~> DATE=$( date -r $(( $( date +%s )-( ${less_days}*${day_secs} ) )) )
AMIGA:amiga~> echo "${DATE}"
Sat 22 Dec 2018 20:33:03 GMT
AMIGA:amiga~> _

# 21  
Old 01-21-2019
Quote:
Originally Posted by wisecracker
This is a method longhand, but I suspect it is not fully POSIX compliant.
OSX 10.14.1, default bash terminal.
Code:
Last login: Mon Jan 21 20:27:49 on ttys000
AMIGA:amiga~> less_days=30
AMIGA:amiga~> day_secs=$(( 24*60*60 ))
AMIGA:amiga~> DATE=$( date -r $(( $( date +%s )-( ${less_days}*${day_secs} ) )) )
AMIGA:amiga~> echo "${DATE}"
Sat 22 Dec 2018 20:33:03 GMT
AMIGA:amiga~> _

Hi wisecracker,
You suspected correctly. The POSIX date utility does not have a -r option and the POSIX date utility does not have a %s format specifier. There are plans to add the %s format specifier in the next revision of the standard. So far, no one has requested adding date -r to the standard.

With standard implementations of awk, you can get the number of seconds since the Epoch (i.e. midnight at the start of January 1, 1970 GMT) using the command:
Code:
awk 'BEGIN{print srand(srand())}'

The perl code that Corona688 suggested in post #17 in this thread is probably the best bet on HP-UX, but, of course, perl isn't in the standard either. Nonetheless, perl is almost surely available for HP-UX from HP even though it isn't standard.

And, kmarcus, I apologize for post #18. I had already asked that question before in post #2 a month ago and you answered it in post #3. Smilie
These 2 Users Gave Thanks to Don Cragun For This Post:
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