我正在使用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
尝试:
$ while read -r line; do date +%s -d "${line%%,*}"; done < input.csv
1597725964
1597726023
1597726083
1597726144
while read -r line; do
启动while
循环并从stdin读取一行。
"${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
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句