我有一个包含3列的文本文件,如此
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,...)直到文件末尾?
答案 0 :(得分:1)
根据您的陈述和数据,您可能需要:
awk '{ print $1, $2, i*60, $3; i++;}' orifile
答案 1 :(得分:1)
与luoluo的答案有关,版本略短:awk '{ print $1, $2, (NR-1)*60, $3}' orifile
答案 2 :(得分:1)
假设时间戳不是均匀分布的,并且您必须解析它们:使用 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.
答案 3 :(得分:0)
另一种解决方案,即在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