我正在尝试开发一个扫描csv文件的shell脚本(例如下面的例子),并用可读的时间戳替换EPOCH时间戳。
csv文件看起来像(列是EPOCH):
1464007935578, 852111
1464007935600, 852111
1464007935603, 852111
1464007935603, 1900681
我的脚本代码:
#!/bin/bash
file=xxx.csv
while read line; do
epoch=`echo $line | awk -F',' '{print $1}'`
miliSec=$(($epoch % 1000 ))
timeWithoutMiliSec=`echo "$(date +"%T" -d@$(($epoch / 1000)))"`
fullTime=`echo "$timeWithoutMiliSec,$miliSec"`
echo $line | awk -F',' '{print $1}'|sed -i 's/[0-9]*/'$fullTime'/g' $file
done <$file
所需的输出
12:52:15,255 852111
12:52:15,257 852111
12:52:15,259 852111
12:52:15,261 1900681
但是当我运行脚本时它会卡住并创建许多以sed *开头的文件 我必须杀死脚本才能阻止它。 我认为问题可能是while循环与sed结合,而两个(sed和while)接受参数$ file
有人可以就此问题提出建议吗?
非常感谢!
答案 0 :(得分:2)
使用$ awk -F, -v OFS=, '{print strftime("%F", $1/1000), $2}' file
2016-05-23, 852111
2016-05-23, 852111
2016-05-23, 852111
2016-05-23, 1900681
&#39; strftime()
功能:
.outer{
height: 1em;
margin: 0 1em 0 1em;
}
.content{
border: 1px solid #000;
border-left: none;
border-right: none;
}
.innerContent{
margin: 0 1em 0 1em;
}
.borderLeftRight{
border-left: 1px solid #000;
border-right: 1px solid #000;
}
这使用
<强>%F 强>
相当于指定'%Y-%m-%d'。这是ISO 8601日期格式。
注意我必须除以1000,因为输入中有毫秒数。