awk IF date comparison help


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting awk IF date comparison help
# 8  
Old 01-06-2020
In awk, the rand() function is seeded with the actual system epoch time, and srand() "returns the value of the previous seed" (c.f. man awk). No need to supply an external datetimestamp. Try this



Code:
aws storagegateway describe-tape-archives | awk 'BEGIN { DT = srand() - 86400 * 90}; $5 < DT'

# 9  
Old 02-07-2020
Hello, back at this again


So I know this tape is older than 90 days, the 2nd and 5th colum (archive and creation date) are both past 90 days.



TAPEARCHIVES 1572970010.744 arn:aws:storagegateway:us-east-2:391499008633:tape/WEEK5B7EFA WEEK5B7EFA 1572283447.819 2748779069440 ARCHIVED 2738042187776


I tried running aws storagegateway describe-tape-archives | awk 'BEGIN { DT = srand() - 86400 * 90}; $5 < DT'


and it's doesn't return any tapes. I think the issue that I'm having is that the epoch dates in the 2nd and 5th column are in a string and I need to get it converted to a int to compare?
# 10  
Old 02-07-2020
Well, for me that line IS returned, be it $2 or $5 that are considered:
Code:
cat file | awk 'BEGIN { DT = srand() - 86400 * 90}; $5 < DT' 
TAPEARCHIVES 1572970010.744 arn:aws:storagegateway:us-east-2:391499008633:tape/WEEK5B7EFA WEEK5B7EFA 1572283447.819 2748779069440 ARCHIVED 2738042187776

, as both dates are more than 90 days past:
Code:
$ date -d@1572970010.744
Di 5. Nov 17:06:50 CET 2019
$ date -d@1572283447.819
 Mo 28. Okt 18:24:07 CET 2019


Sure that line is the output of aws storagegateway describe-tape-archives?
# 11  
Old 02-10-2020
I reran the command and I'm still unable to get the line to output. For testing, i created a test file that had just that line in it, and piped it into the awk command, and I'm still unable to get it to show up.

Code:
kruz@ces-lt-it-kg:~$ cat test
TAPEARCHIVES 1572970010.744 arn:aws:storagegateway:us-east-2:391499008633:tape/WEEK5B7EFA WEEK5B7EFA 1572283447.819 2748779069440 ARCHIVED 2738042187776
kruz@ces-lt-it-kg:~$ cat test | awk 'BEGIN { DT = srand() - 86400 * 90}; $5 < DT'
kruz@ces-lt-it-kg:~$


I am running these commands on the Windows Subsystem for Linux if that would make a difference? Maybe I have a different awk version that's behaving differently?
# 12  
Old 02-10-2020
Here:

Code:
cat file
TAPEARCHIVES 1572970010.744 arn:aws:storagegateway:us-east-2:391499008633:tape/WEEK5B7EFA WEEK5B7EFA 1572283447.819 2748779069440 ARCHIVED 2738042187776
cat file | awk 'BEGIN { DT = srand() - 86400 * 90}; $5 < DT'
TAPEARCHIVES 1572970010.744 arn:aws:storagegateway:us-east-2:391499008633:tape/WEEK5B7EFA WEEK5B7EFA 1572283447.819 2748779069440 ARCHIVED 2738042187776


You might want to develop some creativity when it comes to debugging your scripts / programs. What would be the output of
Code:
awk 'BEGIN {print srand()}'

How does it compare to the values in your file? What would be the difference of $5 and DT?
# 13  
Old 02-10-2020
Code:
kruz@ces-lt-it-kg:~$ awk 'BEGIN {print srand()}'
1
kruz@ces-lt-it-kg:~$

So i tried substituting srand() with an external date variable, same results.



Code:
kruz@ces-lt-it-kg:~$ cat test | awk -v test="$(date +%s)" 'BEGIN { DT = $test - 7776000}; $5 < DT'
kruz@ces-lt-it-kg:~$

Doing the math DT = 1573594249, which is greater than 1572283447.819 ($5), so it should be outputting the line.


I ran through this outside of awk, and one thing I noticed, when I assigned test="$(date +%s)" and called test, it returned;


Code:
kruz@ces-lt-it-kg:~$ test="$(date +%s)"
kruz@ces-lt-it-kg:~$ $test
1581370249: command not found
kruz@ces-lt-it-kg:~$


Last edited by beyondmondays; 02-10-2020 at 06:17 PM..
# 14  
Old 02-11-2020
Not a common awk implementation.


Good approach. Drop the $ before test inside awk:

Code:
$ awk -v test="$(date +%s)" 'BEGIN { DT = test - 7776000}; $5 < DT' file
 TAPEARCHIVES 1572970010.744 arn:aws:storagegateway:us-east-2:391499008633:tape/WEEK5B7EFA WEEK5B7EFA 1572283447.819 2748779069440 ARCHIVED 2738042187776




EDIT: You could even try
Code:
awk -v DT="$(date +%s -d"90 days ago")" '$5 < DT' file


Last edited by RudiC; 02-11-2020 at 08:47 AM..
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

Date comparison

I have below txt file 02.05.2014 10.05.2014 17.09.2014 My requirement is the user enter date field should compare the input file if user enter date as 12.03.2013 it should compare with all date one by one from input file 12.03.2013 -ne 02.05.2014 12.03.2013 -ne 10.05.2014... (3 Replies)
Discussion started by: stew
3 Replies

2. Shell Programming and Scripting

Date Comparison

Hi Need some function or step to compare the date as given below. Example: Date_1: 25/04/2013 Date_2: 20/07/2012 if Date_1 is greater than Date_2 then do... else do.. fi Need exact unix steps to compare the above condition Use code tags please, see PM. (5 Replies)
Discussion started by: anshaa
5 Replies

3. Shell Programming and Scripting

Date comparison script

hi, I have a file named user.cfg under /var/member/ #user.cfg file under /var/member/ login user: root #how are you login pass: admin #where are you M: user1 pass1 #20121008 M: user2 pass2 #20111230 M: user3 pass3 #20091220 M: user4 pass4 #20070210 M: user5 pass5 #20130708 M:... (3 Replies)
Discussion started by: baris35
3 Replies

4. UNIX for Dummies Questions & Answers

date comparison

Hi friends, I would like to compare two dates in an IF statement. This is what I am trying, but it doesn't work. date=20120122 minus=6 if ; then ... fi what would the IF clause looks like? Thanks! :) (5 Replies)
Discussion started by: kokoro
5 Replies

5. Solaris

Date comparison

Date comparison Hello all I am writing a scrip that will take action so long as the date with in the file is older than 3 months. The file will contain multiple rows of data. Each row will probably start with the date. My question... What is the exact code that should be used for date... (1 Reply)
Discussion started by: UofU
1 Replies

6. Shell Programming and Scripting

Date comparison using ksh

Hi All, i have a text sample below. rootdbs 1 0 01/03/2010.03:11 physdbs 2 0 01/03/2010.03:17 logdbs01 3 0 01/03/2010.03:17 logdbs02 4 0 01/03/2010.03:17 dbs01 5 0 01/03/2010.03:17 dbs02 6 0 01/03/2010.03:17 dbs03 7 0 01/03/2010.03:17 dbs04 ... (4 Replies)
Discussion started by: informix2009
4 Replies

7. Homework & Coursework Questions

Date comparison with 'string date having slashes and time zone' in Bash only

1. The problem statement, all variables and given/known data: I have standard web server log file. It contains different columns (like IP address, request result code, request type etc) including a date column with the format . I have developed a log analysis command line utility that displays... (1 Reply)
Discussion started by: TariqYousaf
1 Replies

8. Shell Programming and Scripting

date comparison in bash

Hi I have this simple script: #!/bin/bash date1=2009:07:15:12:36 date2=2009:07:15:12:16 echo $date1 echo $date2 datediff= #datediff=date1-date2 echo datediff is$datediff How do i return the difference in seconds? (6 Replies)
Discussion started by: carp.dk
6 Replies

9. Shell Programming and Scripting

Date comparison

Hi all, I've a shell script which runs on Bourne shell. I've to do a date comparison. If the value of the supplied parameter(in format YYYYMMDD)is greater than todays's date(format YYYYMMDD), it should prompt the user that the supplied date is greater than today's date. The script is given... (6 Replies)
Discussion started by: sumesh.abraham
6 Replies

10. Shell Programming and Scripting

date comparison

How can I compare two dates in String format (eg. May 23 2006 05:30:21) in AWK? Thanks (2 Replies)
Discussion started by: dkr123
2 Replies
Login or Register to Ask a Question