我在这样的文件中有数据......
405,,,405,15.4,0,04/21/12 14:13:29
402,,,402,15.4,0,04/21/12 14:13:37
404,,,404,15.5,0,2012/04/21 14:14:05
404,,,404,15.4,0,2012/04/21 14:14:11
403,,,403,15.4,0,2012/04/21 14:14:17
我想将最后一列转换为YYYY / MM / DD hh:mm:ss格式的日期。
某些行已经采用该格式,因此应忽略它们。
我尝试了以下awk命令但看起来很慢,有时会抛出错误
awk -F ',' '{ ("date -d \""$7"\" \"+%Y/%m/%d %T\"") | getline $7; print }' MyFile
这不必在awk中完成。我在标准的Debian命令行上有任何实用工具。
答案 0 :(得分:5)
我使用sed而不是awk。像这样:
sed 's@,\(..\)/\(..\)/\(..\) @,20\3/\1/\2 @'
问题之前的旧答案已被编辑:
您可以使用tr : /
将冒号转换为斜线,也可以让awk直接进行替换。但是为什么你会认为HH / MM / SS的有效格式超出了我的范围。
答案 1 :(得分:1)
由于您已标记了问题linux,因此我假设您gawk
具有一些内置时间功能:
awk --re-interval -F, '
$7 !~ /[[:digit:]]{4}\// {
split($7, a, "[/ :]");
strftime("%Y/%m/%d %H:%M:%S",
mktime("20" a[3] " " a[1] " " a[2] " " a[4] " " a[5] " " a[6]))}'
}
{
print
}'