我已經與3列的文本文件,這樣一個AWK:隨着值
2010-01-03 11:00:00 -134
2010-01-03 11:01:00 -131
2010-01-03 11:02:00 -128
...
現在我需要在幾秒鐘的時間步驟,而那麼現有的創建列。
如何在$ 2到$ 3之間創建一個新的列,並在文件末尾填充增值(0,60,120,...)?
我已經與3列的文本文件,這樣一個AWK:隨着值
2010-01-03 11:00:00 -134
2010-01-03 11:01:00 -131
2010-01-03 11:02:00 -128
...
現在我需要在幾秒鐘的時間步驟,而那麼現有的創建列。
如何在$ 2到$ 3之間創建一個新的列,並在文件末尾填充增值(0,60,120,...)?
根據您的說法和數據,你可能需要這樣:
awk '{ print $1, $2, i*60, $3; i++;}' orifile
另一種解決方案,在awk
awk '$3=(NR-1)*60 FS $3' file
你插入列,
2010-01-03 11:00:00 0 -134 2010-01-03 11:01:00 60 -131 2010-01-03 11:02:00 120 -128
在連接與羅洛的答案略有縮短版本:awk '{ print $1, $2, (NR-1)*60, $3}' orifile
假設時間戳是不是所有的間隔均勻,你必須分析他們:隨着了GNU AWK你可以使用mktime
做到這一點:
gawk '{ ts = $1 " " $2; gsub(/[-:]/, " ", ts); t = mktime(ts) } NR == 1 { start = t } { $2 = $2 OFS (t - start); } 1'
這種工作方式如下:
{ # for all lines:
ts = $1 " " $2 # concat first and second fields,
gsub(/[-:]/, " ", ts) # replace - and : with spaces. The result is the
# format mktime expects: "YYYY MM DD HH MM SS"
t = mktime(ts) # convert to seconds since Epoch
}
NR == 1 { # in the first line:
start = t # set the starting point
}
{ # for all lines:
$2 = $2 OFS (t - start) # append the seconds since start to the second field,
# effectively inserting a third
}
1 # then print.
也很棒。我只需要它。 – stephan
謝謝,工作就像一個魅力! – stephan