从输出转换日期和时间

从输出转换日期和时间

我有一个包含几千行日期和时间的文件。

我需要转换:

2019/08/02-01:23:50+0000

到:

02/Aug/2019-01:23:50 +0000   

我到目前为止

th=`grep -o '\[.*\]' test.txt | sed 's/\"//g' | head -1
echo $th | date -d +'%Y/%b/%d-%T'

date: invalid date ‘+%Y/%b/%d-%T’

我如何读取日期并格式化它?

答案1

像这样:

echo '2019/08/02-01:23:50+0000' | awk -F'/|\+|-' -v month=$(echo '2019/08/02-01:23:50+0000' | awk -F'-' '{print $1}'|date +%b -f -) '{printf "%s/%s/%s-%s +%s\n", $3,month,$1,$4,$5}'

在一行中或

MONTH=$(echo '2019/08/02-01:23:50+0000' | awk -F'-' '{print $1}'|date +%b -f -)
echo '2019/08/02-01:23:50+0000' | awk -F'/|\+|-' -v month="$MONTH" '{printf "%s/%s/%s-%s +%s\n", $3,month,$1,$4,$5}'

第一步是提取 2019/08/02 并将 08 转换为 Aug,然后使用多个分隔符提取所有字段并printf采用我们想要的格式。这里有个棘手的事情,将shell变量传递给(在格式中awk随意填充以删除)\nprintf

相关内容