![使用 awk 添加日期时间列和秒列](https://linux22.com/image/146700/%E4%BD%BF%E7%94%A8%20awk%20%E6%B7%BB%E5%8A%A0%E6%97%A5%E6%9C%9F%E6%97%B6%E9%97%B4%E5%88%97%E5%92%8C%E7%A7%92%E5%88%97.png)
我有一个如下所示的 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
。