使用 awk 添加日期时间列和秒列

使用 awk 添加日期时间列和秒列

我有一个如下所示的 csv 文件

DateTime                Keywords    CallDuration       CallEndTime
2018-12-18 18:36:55    cars,petrol    120
2018-12-19 15:10:19    diesel          90
2018-12-17 15:10:19    bus             86

我想添加 DateTime 和 CallDuration 列,相应的总和应放在 CallEndTime 列中,

我怎样才能使用 awk 做到这一点?

答案1

假设您的文件是制表符分隔的。

awk -F$'\t' '
    BEGIN{OFS="\t"}
    NR!=1{
        ("date -Iseconds -d \""$1"\"" | getline startdate)
        ("date \"+%Y-%m-%d %H:%M:%S\" -d \""startdate" + "$3" seconds\"" | getline $4)
    }1' file.csv
  • BEGIN{OFS="\t"}将输出字段分隔符设置为制表符。
  • NR!=1{...}对除标题之外的任何行运行括号中的命令。
    • ("date -Iseconds -d \""$1"\"" | getline startdate)将日期转换为日期命令易于读取的格式并将其保存为startdate变量。
    • ("date \"+%Y-%m-%d %H:%M:%S\" -d \""startdate" + "$3" seconds\"" | getline $4)$3从 field添加秒数startdate并将其保存为 field $4
  • 1打印该行。

如果文件不是制表符分隔的,则需要使用以下内容修复它:sed -i -r 's/\s\s+/\t/' file.csv

相关内容