gpt4 book ai didi

shell - system() 产生不一致的结果

转载 作者:行者123 更新时间:2023-12-03 17:43:38 25 4
gpt4 key购买 nike

我正在使用 awk 向 CSV 文件添加一列。文件的每一行都以日期和时间开头。
我希望新列是那个时间作为 Unix 纪元时间戳。
我将前三个字段提供给“日期”,这确实给了我时间戳,但有一些我不想要的杂散逗号“,”。下面是一个简化版本,只打印一个时间戳列作为输出。输入文件:

08/17/2020 21:46:04 -700 , 1 , 2 , 3
08/17/2020 21:47:03 -700 , 1 , 2 , 3
08/17/2020 21:48:03 -700 , 1 , 2
08/17/2020 21:49:04 -700 , 1 , 2
这是我的程序:
cat input.csv | awk '{
tmp=$(system("date +%s -d \""$1" "$2" "$3"\""));
printf("%s", $tmp );
}'
这是输出。这就是我所期望的,除了第 2 行和第 3 行的前导逗号。我认为 'tmp' 变量从 'date' 获得结果,包括一个尾随换行符,但有时在换行符后还有一个逗号。这似乎取决于输入文件中有多少个字段跟随前三个,但我只引用前三个,如 $1 $2 $3 所以输入行的其余部分不起作用(?)为什么那些逗号出现在输出,我怎么能删除它们?有一个更好的方法吗?
1597725964
,1597726023
,1597726083
1597726144

最佳答案

使用 shell
尝试:

$ while read -r line; do date +%s -d "${line%%,*}"; done < input.csv
1597725964
1597726023
1597726083
1597726144
这个怎么运作
  • while read -r line; do开始 while循环并从标准输入读取一行。
  • "${line%%,*}"从行中删除逗号及其后的所有内容。
  • date +%s -d "${line%%,*}"将日期打印为纪元。
  • done完成 while环形。
  • <input.csv为循环提供标准输入。

  • 变化
    这将打印整行并将纪元添加为最后一列:
    $ while read line; do printf "%s, %s\n" "$line" $(date +%s -d "${line%%,*}"); done < input.csv
    08/17/2020 21:46:04 -700 , 1 , 2 , 3, 1597725964
    08/17/2020 21:47:03 -700 , 1 , 2 , 3, 1597726023
    08/17/2020 21:48:03 -700 , 1 , 2, 1597726083
    08/17/2020 21:49:04 -700 , 1 , 2, 1597726144

    关于shell - system() 产生不一致的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63462381/

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