格式化使用AWK输出反向日期和时间



假设我有一个格式为"YYYY-MM-DD-HH:MM:SS"的行,如何将其更改为"DD-MM-YYY HH:MM">

?我只设法想出这个:awk -F'-' '{ YY=$1 ; MM=$2 ; DD=$3 ; print DD MM YY }',它将输出DDMMYYY。

plain bash:

input="YYYY-MM-DD-HH:MM:SS"
IFS=": -" read y m1 d h m2 s <<<"$input"
output="$d-$m1-$y $h:$m2"

调用awk:

input="YYYY-MM-DD-HH:MM:SS"
output=(
echo "$input" | awk '
split($0,a,/[: -]/) {
printf "%s-%s-%s %s:%sn", a[3],a[2],a[1],a[4],a[5]
}
'
)

都假定输入是格式良好的。


指出:

  • 我最初在DD和HH之间有一个空格,因为我误解了你的问题。我的代码可以使用任何分隔符组合(冒号,空格,连字符)。
  • 答案假设您想要4位数的年份。要获得3位数的年份(去掉第一位数字):
    • bash:使用${y#?}代替$y
    • awk:用substr(a[1],2)代替a[1]

假设你想要YYYY:

input="YYYY-MM-DD-HH:MM:SS"
awk -F '[:-]' '{print $3 "-" $2 "-" $1 " " $4 ":" $5}' <<<"$input"

输出
DD-MM-YYYY HH:MM

如果要转换为实际日期

$ input="2022-06-01-11:10:00"
$ date -d "${input%-*} ${input##*-}" +'%d-%m-%Y %H:%M'
01-06-2022 11:10

GNU awk

awk '
BEGIN{ format = "%d-%m-%Y %H:%M" }
{
gsub(/[-:]/," ");
print strftime(format, mktime($0))}
' <<<"$input"
01-06-2022 11:10
$ cat file
2022-06-01-11:10:01
2022-07-02-12:11:02
2022-08-03-13:12:03
$ awk 'BEGIN{ format = "%d-%m-%Y %H:%M" }{gsub(/[-:]/," ");print strftime(format, mktime($0))}' file
01-06-2022 11:10
02-07-2022 12:11
03-08-2022 13:12  

相关内容

  • 没有找到相关文章

最新更新