Date manipulation using awk


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Date manipulation using awk
# 1  
Old 10-04-2013
Date manipulation using awk

Hi Experts,

In the below mentioned file,

John, Miami, ,2013-10-03

I would like to perform difference of $4 and sysdate.

If sysdate date is 2013-10-04, then the output shall be

John, Miami,,1

For which I tried something like the one shown below,

Code:
#!/bin/bash
sed -e "s/-//g"  file > tmp
t=`date "+%Y%m%d"`
awk -F',' '{s=$(date -d"$4" +%s); j=$(date -d"$t" +%s); k=$($($($j-$s)/3600)/24); print $1","$2","$3","k}' input > output

Can someone please tweak the awk expression and make it to work.

I wanted to return 1380747600 for s and 1380834000 for j.
So that j-s=86400
convert into days ->(j-s)/3600/24

The date expressions work fine in bash, but not in awk.

-Victor

Last edited by radoulov; 10-05-2013 at 07:28 AM..
# 2  
Old 10-04-2013
awk does not work that way, $ does not work that way, $( ) does not work that way, date does not work that way, and you cannot use shell expressions inside awk that way.

What version of awk do you have? If you have GNU awk you have some date functions built in.
# 3  
Old 10-04-2013
Code:
awk -F, -v OFS="," '{ split(/-/, A, $3); T=systime()-mktime(sprintf("%04d %02d %02d 00 00 00", A[1], A[2], A[3]));
        T/=(60*60*24);
        $3=T;        
 } 1' inputfile

# 4  
Old 10-04-2013
Thanks Corona for the reply.

As I was having the date in $4, I changed as follows.

Code:
  gawk -F, -v OFS=, '{ split(/-/, A, $4); T=systime()-mktime(sprintf("%04d %02d %02d 00 00 00", A[1], A[2], A[3]));
        T/=(60*60*24);
        $4=T;        
 } 1' inputfile

$ cat inputfile
John,Miami,,2013-10-03

$ date
Fri Oct  4 23:17:36 AST 2013

$ bash -x scr.sh
+ gawk -F, -v OFS=, '{ split(/-/, A, $4); T=systime()-mktime(sprintf("%04d %02d %02d 00 00 00", A[1], A[2], A[3]));
        T/=(60*60*24);
        $4=T;        
 } 1' inputfile
John,Miami,,735177

Kindly help, as it is not giving the expected result.

I changed to gawk, as I'm running on Linux.

Last edited by Corona688; 10-04-2013 at 06:43 PM..
# 5  
Old 10-04-2013
I mixed up the array and the split string in split(), try this:

Code:
gawk -F, -v OFS=, '{ split($4, A, "-"); T=mktime(sprintf("%04d %02d %02d 00 00 00", A[1], A[2], A[3]));
        $4=int((systime()-T)/(60*60*24));
 } 1' inputfile

This User Gave Thanks to Corona688 For This Post:
# 6  
Old 10-05-2013
Quote:
Originally Posted by Corona688
I mixed up the array and the split string in split(), try this:

Code:
gawk -F, -v OFS=, '{ split($4, A, "-"); T=mktime(sprintf("%04d %02d %02d 00 00 00", A[1], A[2], A[3]));
        $4=int((systime()-T)/(60*60*24));
 } 1' inputfile

Thanks for the change, it worked as expected Smilie. This gave me an opportunity to get an insight on awk programming.
This User Gave Thanks to victory101 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

Date-Manipulation-1

Hallo Team I can perform the task manually but i would like to automate this process. ok here goes. I have a perl script which runs every Wednesday every week and the name of the script is check_19.pl This is how the script looks like : #!/usr/bin/perl -w #use strict; use DBI; #... (1 Reply)
Discussion started by: kekanap
1 Replies

2. Shell Programming and Scripting

Date manipulation

In my shell script I take date as a input parameter from command line in the format "21 Oct 2011" which would be date +'%d %b %Y' Now i need to do two things here. 1) Validate the date entered by user 2) Calculate yesterday's date from the input. So in this case it should be: "20 Oct 2011"... (9 Replies)
Discussion started by: davidtd
9 Replies

3. Shell Programming and Scripting

date field manipulation

I have a data file. Seperated by "|". The 19 th filed is a date field that occurs like this 11/02/2001 i need to convert into the below format 2001-11-02 for e.g.. i/p o/p should be can somebody throw some light (5 Replies)
Discussion started by: dsravan
5 Replies

4. Shell Programming and Scripting

Date Manipulation

I have a file with a field containing the following: "7/3/2009 7:07:12 PM","xxxx" I need to be able to split this field up into two into a different format with the time being converted into 24 hour: so that i can get the following: "20090307","19:07:12","xxxx" (8 Replies)
Discussion started by: Pablo_beezo
8 Replies

5. Shell Programming and Scripting

Date manipulation

How can i print a future time, so i get current time by date "+%H:M" but how can i say add 20 minutes to the current time and display as I have just done for current time. (1 Reply)
Discussion started by: kelseyh
1 Replies

6. Shell Programming and Scripting

Date manipulation

Hi Gurus, How to minus 15 minuets from current system time. For example if current time is " Wed Oct 14 12:12:38 BST 2009", i need "Wed Oct 14 11:57:38 BST 2009" Thanks (2 Replies)
Discussion started by: kumarmani
2 Replies

7. Shell Programming and Scripting

date manipulation

HI, I'm comparing my file date with the system date and if both the dates are equal I'm doing some operation. I use two variables for these two dates. I use the following command in my query. if .... But here the current date $cd shows 01 and filedate $fdate shows 1. The file is created on 1 of ... (6 Replies)
Discussion started by: pstanand
6 Replies

8. Shell Programming and Scripting

Date Manipulation

I need to achieve the following.....I seached the forum but could not find it... This is I have in a file... "CH","TIA","10/27/2006",000590 I need the date in the third field to be attached to fileas 20061027_test.txt How do I do it. (6 Replies)
Discussion started by: mgirinath
6 Replies

9. Shell Programming and Scripting

date manipulation

I'm writing a ksh script in which I want to present the user with a choice of choosing any of the last 15 days. i.e., a list like the following: 20040510 (today) 20040509 (yesterday) 20040508 . . . 20040426 Is there an easy way to produce the date from x number of days ago other than... (3 Replies)
Discussion started by: jalburger
3 Replies

10. Programming

Time/date manipulation

hey folks, been awhile (actaully a long while) since i last touched C. And the 3 books i've read don't really have much about using time.h Question: How would i be able to assign a variable the value of the current date minus 2 mths, keeping in mind the yr. IE. would like to see Nov.31/2001... (1 Reply)
Discussion started by: choice
1 Replies
Login or Register to Ask a Question