这是从源 CSV 文件中截取的内容。
%status,date,job,project,start,end,description
%
//,18.03.2021,sib,sib-dede,07:00,15:00,dede-mongo
%
//,11.06.2021,sib,sib-dede,07:00,15:00,dede-mongo
%
//,24.06.2021,sib,sib-dede,07:00,15:00,dede-mongo
%
?,02.08.2021,sib,sib-accounting,14:35,16:35,business-plan
%
?,13.10.2021,sb,sb-accounting,11:30,12:00,e-mail-pump
我喜欢从源 CSV 文件中提取第 5 列中的开始时间和第 6 列中的结束时间。
接下来,根据开始和结束时间,我喜欢以小时或分钟为单位处理持续时间(不介意)。
最终,我喜欢获取源 CSV 文件,在现有的第 6 列和第 7 列之间插入一个新列以及处理的持续时间,并将此添加内容保存在结果 CSV 文件中。
有人知道如何在 GNU Debian Linux 命令行上应对这一挑战吗?
我知道我可以像这样从 CSV 文件中
cut
指定列。
cut -d, -f5,6 < ./source.csv > ./result.csv
但是,我仍然缺少持续时间处理和结果 CVS 文件创建。
PS:我更喜欢 Bash。
PPS:有像this这样的相关问题,但我发现没有一个与这个问题接近。
我更喜欢 Bash
但是您可以一次性完成所有操作,例如使用 GNU Awk(假设示例中的
%
符号(或后续换行符)只是一个拼写错误):
awk -F , -v OFS=, '{
$8=$7; $7=(
mktime(sprintf("0 0 0 %d %d 0", substr($6,1,2), substr($6,3,2))) -
mktime(sprintf("0 0 0 %d %d 0", substr($5,1,2), substr($5,3,2)))
) / 60; print
}' source.csv