gpt4 book ai didi

date - 如何将特定列中的文件 csv 日期转换为 unix 日期

转载 作者:行者123 更新时间:2023-12-01 21:27:52 25 4
gpt4 key购买 nike

我有一个包含这些列的 csv 文件:

"Weight","Impedance","Units","User","Timestamp","PhysiqueRating"
"58.75","5.33","kg","7","2020-7-11 19:29:29","5"

当然,我可以转换日期命令:date -d '2020-7-11 19:29:29' +%s

结果:1594488569

如何在 bash 脚本中替换 csv 文件中的这个日期?

最佳答案

使用 GNU sed

sed -E '2,$ s/(("[^"]*",){4})("[^"]+")(.*)/echo \x27\1"\x27$(date -d \3 +%s)\x27"\4\x27/e'
  • 2,$ 跳过 header 处理
  • (("[^"]*",){4})前四列
  • ("[^"]+")第五列
  • (.*) 行的其余部分
  • echo\x27\1"\x27\x27"\4\x27 保留前四列和第五列之后的其余行,同时添加双引号到日期转换的结果
  • $(date -d\3 +%s) 使用第五列值调用 shell 命令

请注意,如果输入可以包含单引号,则此命令将失败。这可以通过使用 s/\x27/\x27\\&\x27/g 来解决。


您可以看到使用-n 选项和pe 标志执行的命令

sed -nE '2,$ s/(("[^"]*",){4})("[^"]+")(.*)/echo \x27\1"\x27$(date -d \3 +%s)\x27"\4\x27/pe'

会给予

echo '"58.75","5.33","kg","7","'$(date -d "2020-7-11 19:29:29" +%s)'","5"'


对于 58.25,5.89, kg, 7,2020/7/12 11:23:46, "5" 格式,尝试

sed -E '2,$ s/(([^,]*,){4})([^,]+)(.*)/echo \x27\1\x27$(date -d "\3" +%s)\x27\4\x27/e'

或(改编自 https://stackoverflow.com/a/62862416)

awk 'BEGIN{FS=OFS=","} NR>1{$5=mktime(gensub(/[:\/]/, " ", "g", $5))} 1'


注意:对于sed 解决方案,如果输入可以来自外部源,您必须注意避免评论中提到的恶意意图。一种方法是使用 [0-9: -]+ 或类似方法匹配第五列。

关于date - 如何将特定列中的文件 csv 日期转换为 unix 日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62859187/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com