使用awk或其他方法转换最后一列中的日期格式

gen*_*ion 2 linux bash awk sed

我有像这样的文件中的数据......

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
Run Code Online (Sandbox Code Playgroud)

我想将最后一列转换为YYYY/MM/DD hh:mm:ss格式的日期.

有些行已经采用这种格式,因此应该忽略它们.

我尝试了以下awk命令,但它似乎很慢,有时会抛出错误

awk -F ',' '{ ("date -d \""$7"\" \"+%Y/%m/%d %T\"") | getline $7; print }' MyFile
Run Code Online (Sandbox Code Playgroud)

这不必在awk中完成.我在标准的Debian命令行中有任何实用程序.

Joh*_*nck 5

我会用sed而不是awk.像这样的东西:

sed 's@,\(..\)/\(..\)/\(..\) @,20\3/\1/\2 @'
Run Code Online (Sandbox Code Playgroud)

问题前的旧答案被编辑:

您可以使用tr : /将冒号转换为斜线,或者您可以直接使用awk进行替换.但是为什么你会认为HH/MM/SS的有效格式超出了我的范围.

  • @generalexception它找到具有任意两个字符(`..`)三次的行,用前斜杠分隔.捕获每个两个字符对并给出一个用于替换的数字(`\ 1`,`\ 2`和`\ 3`).然后他将第三个捕获放在第一位(前面有一个'20',第一个是第二个,第二个是第三个.第一个和第二个`@`之间的位是"seach"部分和第二个和第三个之间的位`@`是替换部分.有关sed的更多信息,请参阅此处:http://www.grymoire.com/Unix/Sed.html. (2认同)