awk 命令转换文件中的日期格式

Pro*_*mer 4 shell awk

下面给出了文件内容和使用的 awk 命令:

输入文件:in_t.txt

1,ABC,SSS,20-OCT-16,4,1,0,5,0,0,0,0
2,DEF,AAA,20-JUL-16,4,1,0,5,0,0,0,0
Run Code Online (Sandbox Code Playgroud)

预期输出文件:

SSS|2016-10-20,5
AAA|2016-07-20,5
Run Code Online (Sandbox Code Playgroud)

我尝试了以下命令:

awk -F , '{print $3"|"$(date -d 4)","$8}' in_t.txt
Run Code Online (Sandbox Code Playgroud)

得到的输出文件为:

SSS|20-OCT-16,5
AAA|20-JUL-16,5
Run Code Online (Sandbox Code Playgroud)

我唯一想知道的是如何使用相同的 awk 命令格式化日期。尝试过

awk -F , '{print $3"|"$(date -d 4)","$8 +%Y-%m-%d}' in_t.txt
Run Code Online (Sandbox Code Playgroud)

出现语法错误。我可以得到一些帮助吗?

anu*_*ava 5

最好在 shell 本身中执行此操作并用于date -d转换date格式:

#!/bin/bash

while IFS=',' read -ra arr; do
   printf "%s|%s,%s\n" "${arr[2]}" $(date -d "${arr[3]}" '+%Y-%m-%d') "${arr[7]}"
done < file

SSS|2016-10-20,5
AAA|2016-07-20,5
Run Code Online (Sandbox Code Playgroud)