awk mktime(strftime(format,"6-FEB-2013 08:50:03.841")


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting awk mktime(strftime(format,"6-FEB-2013 08:50:03.841")
# 1  
Old 03-11-2014
[Solved] awk mktime(strftime(format,"6-FEB-2013 08:50:03.841")

I'm trying to use AWK to filter on some dates in a field by converting them to Unix Time.

Code:
mktime(strftime(format,"6-FEB-2013 08:50:03.841")

What is the proper format for my date strings as they appear in my database?

My first thought is
Code:
%d-%b-%Y %H:%M:%S

but I see the following issues:
%d is 2-digit, my dates can be 1 or 2 digit. I see %_d and %e but my dates are not space padded.
%b is Jan,Feb, etc. my dates are JAN, FEB
will %s handle the decimal seconds?

Mike

Last edited by Michael Stora; 03-14-2014 at 06:45 AM..
# 2  
Old 03-11-2014
Try %-2d-%b-%Y %H:%M:%S.%3u with tr -s '[:lower:]' '[:upper:]' for the upper case requirement.

---------- Post updated at 12:15 PM ---------- Previous update was at 11:34 AM ----------

Sorry just realised you want awk code, try:

Code:
$ awk '
BEGIN {
    t="6-FEB-2013 08:50:03.841"
    gsub(/\-|:|\./, FS, t)
    split(t,a)
    M = 1 + (index("JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC", toupper(a[2])) - 1) / 3
    print mktime(sprintf("%d %d %d %d %d %d", a[3], M, a[1], a[4], a[5], a[6])) "." a[7]
}'
1360104603.841

Wrap it up in a function if you need to call it a few times throughout your code.
These 2 Users Gave Thanks to Chubler_XL For This Post:
# 3  
Old 03-12-2014
Thanks a lot Chubler_XL. I realized I do not need floating point math but I still need to split out a[7] but just not use it.

I also see that mktime is not as strict as the documentation implies (YYYY MM DD HH MM SS)
Code:
sprintf("%d %d %d %d %d %d", a[3], M, a[1], a[4], a[5], a[6])

is just as good as
Code:
sprintf("%04d %02d %02d %02d %02d %02d", a[3], M, a[1], a[4], a[5], a[6])

Love the index trick.

Mike
# 4  
Old 03-14-2014
I found a bug in Chubler_XL's code:
Code:
t="6-FEB-2013 08:50:03.841"
gsub(/\-|:|\./, FS, t)
split(t,a)

The -,:, and . characters are getting replaced with FS but the space is not. I was getting some strange hour numbers. I changed it to:
Code:
t="6-FEB-2013 08:50:03.841"
gsub(/\-|:|\./, " ", t)
split(t,a," ")

Mike
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Bash script - Print an ascii file using specific font "Latin Modern Mono 12" "regular" "9"

Hello. System : opensuse leap 42.3 I have a bash script that build a text file. I would like the last command doing : print_cmd -o page-left=43 -o page-right=22 -o page-top=28 -o page-bottom=43 -o font=LatinModernMono12:regular:9 some_file.txt where : print_cmd ::= some printing... (1 Reply)
Discussion started by: jcdole
1 Replies

2. UNIX for Advanced & Expert Users

[SOLVED] Making mktime/strftime available to mawk

I frequently use awk time functions and am switching some scripts over to mawk. I don't have the mktime or strftime functions in mawk, but it appears that there is a way, as explained here in "Time functions": Please only cut-and-past links to man pages from our man pages. So, simple... (10 Replies)
Discussion started by: treesloth
10 Replies

3. Shell Programming and Scripting

Awk,sed : change every 2nd field ":" to "|"

Hi Experts, I have a string with colon delimited, want 2nd colon to be changed to a pipe. data: 101:8:43:4:72:14:41:69:85:3:137:4:3:0:4:0:9:3:0:3:12:3: I am trying with sed, but can change only 1 occurance: echo "101:8:43:4:72:14:41:69:85:3:137:4:3:0:4:0:9:3:0:3:12:3:" | sed 's/:/|/2'... (5 Replies)
Discussion started by: rveri
5 Replies

4. Post Here to Contact Site Administrators and Moderators

Suggestion: adding two new groups "sed" and "awk"

Majority of the questions are pertaining file/string parsing w.r.t sed or awk It would be nice to have these two as their own sub category under shell-programming-scripting which can avoid lot of duplicate posts. (1 Reply)
Discussion started by: jville
1 Replies

5. Shell Programming and Scripting

how to use "cut" or "awk" or "sed" to remove a string

logs: "/home/abc/public_html/index.php" "/home/abc/public_html/index.php" "/home/xyz/public_html/index.php" "/home/xyz/public_html/index.php" "/home/xyz/public_html/index.php" how to use "cut" or "awk" or "sed" to get the following result: abc abc xyz xyz xyz (8 Replies)
Discussion started by: timmywong
8 Replies

6. Shell Programming and Scripting

awk command to replace ";" with "|" and ""|" at diferent places in line of file

Hi, I have line in input file as below: 3G_CENTRAL;INDONESIA_(M)_TELKOMSEL;SPECIAL_WORLD_GRP_7_FA_2_TELKOMSEL My expected output for line in the file must be : "1-Radon1-cMOC_deg"|"LDIndex"|"3G_CENTRAL|INDONESIA_(M)_TELKOMSEL"|LAST|"SPECIAL_WORLD_GRP_7_FA_2_TELKOMSEL" Can someone... (7 Replies)
Discussion started by: shis100
7 Replies

7. Shell Programming and Scripting

Simplify Bash Script Using "sed" Or "awk"

Input file: 2 aux003.net3.com error12 6 awn0117.net1.com error13 84 aux008 error14 29 aux001.ha.ux.isd.com error12 209 aux002.vm.ux.isd.com error34 21 alx0027.vm.net2.com error12 227 dux001.net5.com error123 22 us008.dot.net2.com error121 13 us009.net2.com error129Expected Output: 2... (4 Replies)
Discussion started by: sQew
4 Replies

8. Shell Programming and Scripting

cat $como_file | awk /^~/'{print $1","$2","$3","$4}' | sed -e 's/~//g'

hi All, cat file_name | awk /^~/'{print $1","$2","$3","$4}' | sed -e 's/~//g' Can this be done by using sed or awk alone (4 Replies)
Discussion started by: harshakusam
4 Replies

9. Shell Programming and Scripting

help for saving vertical datas to horizontal with "awk" or "cut"

hi, i have a file having datas like that ./a.txt 12344 12345 12346 12347 ..... ..... ... i want to save this datas to another file like that ./b.txt 12344 12345 12346 12347 ... ... ... i think awk can make this but how? :) waiting for ur help. (3 Replies)
Discussion started by: mercury
3 Replies

10. UNIX for Dummies Questions & Answers

Explain the line "mn_code=`env|grep "..mn"|awk -F"=" '{print $2}'`"

Hi Friends, Can any of you explain me about the below line of code? mn_code=`env|grep "..mn"|awk -F"=" '{print $2}'` Im not able to understand, what exactly it is doing :confused: Any help would be useful for me. Lokesha (4 Replies)
Discussion started by: Lokesha
4 Replies
Login or Register to Ask a Question