在linux bash脚本中的awk中执行日期实用程序

Mat*_*att 1 linux bash shell awk date

我试图使用awk格式化文件中的一些文本.

要求是用以下格式表示人类可读时间的格式化字符串替换表示纪元时间的冒号分隔文件(:)的第3个字段:DD/MM/YYYY

这是一个示例文件:

abc:$3$wHe$JKAP1Ry.CAcEGhD0J7SGVl.AMg.0:1427135400:0:120:7:30::
rst:$6$3WWbfvblr6FF92R5/n3mLdlSkARgfRm1:1427293800:0:40:7:30::
xyz:$1$xuTkkle203F$df.ixcn/mcuFIO90lndn:1420478400:0:90:7:30::
def:$4$vid2003mDEOF$dc2.Rkdlkfdiw8/cib6:1389547200:0:120:7:30::
ab:*$5P1wHeEG$JKA2ya.ikol30.de/ldiv.230:1449771300:0:120:7:30::
xy:$1k3lc930vs.lskdie/sldiemDIIsdk193n:1429995693:0:50:7:30::
xyy:*$tkwsMt972w.Csrl5jr.23nsoijsleqJK:1429995889:0:120:7:30::
Run Code Online (Sandbox Code Playgroud)

通过使用日期将第3个字段中的一个值复制并粘贴到命令中,我已经能够创建所需的结果:

date -d @1427135400 +"%d/%m/%Y"
23/03/2015
Run Code Online (Sandbox Code Playgroud)

这是我试图在脚本中执行的awk命令,我一直在推文脚本,希望能让它工作,但没有运气.请注意,$ userFound已经存储了上面列出的文件中的一行:

  echo $userFound | awk -F':' '{  
                                                    if ( $2 ~ /^\*/ ) {$2="L"}              \
                                                    if ($2 ~ /^[^*]/) {$2="P"}              \
                                                    cmd="date -d @"$3" +\"%d/%m/%Y\""       \
                                                    cmd | getline time                      \
                                                    close(cmd)                              \
                                            }                                               \
                                            END {                                           \
                                            print $1":"$2":"time":"$4":"$5":"$6":"$7":"$8":"$9      \
                                            }'
Run Code Online (Sandbox Code Playgroud)

运行当前脚本,我得到以下输出:

awk: cmd. line:5: (FILENAME=- FNR=1) fatal: expression for `|' redirection has null string value
Run Code Online (Sandbox Code Playgroud)

ani*_*ane 5

不要使用date您尝试使用的命令.

使用awk功能:strftime("%d/%m/%Y", $3).

更多信息在这里