我在日志文件中有一堆日期,它们使用年份格式而不是月份格式:
所以我看到:
2013-10-302
代替
2013-10-29
我希望它们采用月份格式。所以我这样做:
sed "s/2013-10-302/2013-10-29/
但是这种方法的一个问题是我需要转换几个日期。如果月份是 10,我可以做类似的事情,然后从一年中的一天中减去 273。如果月份是 9,则减去其他内容。
因此,即使没有更好的方法,关于我如何做到这一点的任何提示?即如果是第10个月减去273?
坦斯克
您正在以 %Y-%m-%j 格式获取日期,其中%j代表一年中的某一天。
如果你这样做呢?
$ date -d "Jan 1 2013 + 302 days" "+%F"
2013-10-30
把它放在上下文中,如果你有一个像
$ cat a
2013-10-302
您可以通过以下步骤“清理”它:
$ cat a
2013-10-302
获取自 1 月 1 日以来的旧日期和第三个字段:
$ old_date=$(cat a)
$ echo $old_date
2013-10-302
$ day=$(cut -d- -f3 <<< "$old_date")
$ echo $day
302
计算实际日期并更新文件:
$ new_date=$(date -d "Jan 1 2013 + $day days" "+%F")
$ echo $old_date, $new_date
2013-10-302, 2013-10-30
$ sed -i "s/$old_date/$new_date/g" a
$ cat a
2013-10-30
尝试使用awk
awk 'BEGIN {
FS=OFS="-"
} {
cmd="date -d "$1"-"$2"-01 +%j";
cmd | getline offset;
$3=sprintf("%02d",$3-offset+1);
print
}' file
测试
输入文件
2013-10-302
2013-11-310
2013-09-268
输出
2013-10-29
2013-11-06
2013-09-25