这是从源 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 命令行上应对这一挑战吗?
我知道我可以cut
从这样的 CSV 文件中指定列。
cut -d, -f5,6 < ./source.csv > ./result.csv
但是,我仍然缺少持续时间处理和结果 CVS 文件创建。
PS:我更喜欢 Bash。
PPS:有类似的相关问题,但我发现没有与此问题相关的问题。
但是您可以一次性完成所有操作,例如使用
mktime
GNU Awk(假设%
样本中的符号(或后续换行符)只是一个拼写错误,并且第 6 列中的时间高于第 5 列中的时间,否则结果为负数):假设:
%
跟着以//
或?
开头的行,并且diff
添加的列的标题然后使用任何 awk:
无需
grep
先运行 - 将 grep 管道传输到 awk 是一种反模式,请参阅https://porkmail.org/era/unix/award#grep。