我正在使用redHat linux。
我的文件看起来像是:
$ vi filename
Jan,1:00:00:01,有人检查了您的文件
一月,3,09:38:02,阿普尔比
Jan,16,10:20:03,****************
Jan,18,03:04:03,***************
我希望输出看起来像:
2015/01 / 01,00:00:01,有人检查了你的文件
2015/01 / 03,3,09:38:02,阿普尔比
2015/01 / 16,16,10:20:03,****************
2015/01 / 18,03:04:03,***************
请帮我这样做。感谢
答案 0 :(得分:2)
如果您有GNU日期,请尝试:
$ awk -F, '{cmd="date -d \""$1" "$2"\" +%Y/%m/%d"; cmd|getline d; print d","$3","$4; close(cmd)}' file
2015/01/01,00:00:01,someone checked your file
2015/01/03,09:38:02,applebee
2015/01/16,10:20:03, ****************
2015/01/18,03:04:03, ***************
此方法不能与date
的BSD(OSX)版本一起使用,因为它不支持任何可比较的-d
选项。
awk隐式循环输入行,将每一行分成字段。
-F,
这告诉awk使用逗号作为字段分隔符
cmd="date -d \""$1" "$2"\" +%Y/%m/%d"
这将创建一个字符串变量cmd
,并包含date
命令。我假设你有GNU date
。
cmd|getline d
这将运行命令并以变量d
。
print d","$3","$4
这将打印您要求的输出。
close(cmd)
这将关闭命令。