簡體   English   中英

Unix中的時間戳數據操作

[英]timestamp data manipulation in unix

我有一個包含兩個時間戳字段的csv數據文件-start_time和end_time。 它們是形式為"2014-02-01 00:06:22"字符串。 數據文件的每一行都是具有多個字段的記錄。 該文件很小。

我想計算所有記錄之間的平均持續時間。 除了使用shell腳本之外,是否可以使用awk進行這種簡單的計算使用任何單線命令?

我對awk非常陌生。 這是我所擁有的但不起作用。 $6$7是start_time和end_time的字段。

awk -F, 'BEGIN { count=0 total=0 }
    { sec1=date +%s -d $6 sec2=date +%s -d $7
    total+=sec2-sec1 count++} 
    END {print "avg trip time: ", total/count}' dataset.csv

csv文件示例:

"start_time","stop_time","start station name","end station name","bike_id"
"2014-02-01 00:00:00","2014-02-01 00:06:22","Washington Square E","Stanton St & Chrystie St","21101"

對mktime()和gensub()使用GNU awk:

$ cat tst.awk
BEGIN { FS="^\"|\",\"" }
function t2s(time) { return mktime(gensub(/[-:]/," ","g",time)) }
NR>1 { totDurs += (t2s($3) - t2s($2)) }
END { print totDurs / (NR-1) }

$ gawk -f tst.awk file
382

與其他awk,您需要調用shell date函數:

$ cat tst2.awk
BEGIN { FS="^\"|\",\"" }
function t2s(time,      cmd,secs) {
    cmd = "date +%s -d \"" time "\""
    if ( (cmd | getline secs) <= 0 ) {
        secs = -1
    }
    close(cmd)
    return secs
}
NR>1 { totDurs += (t2s($3) - t2s($2)) }
END { print totDurs / (NR-1) }

$ awk -f tst2.awk file                               
382

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM