【发布时间】:2015-08-20 01:29:47
【问题描述】:
我正在尝试使用 awk 格式化文件中的一些文本。
要求是将表示纪元时间的以冒号分隔的文件 (:) 的第三个字段替换为表示人类可读时间的格式化字符串,格式如下: 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::
通过使用 date 将第三个字段中的一个值复制并粘贴到 a 命令中,我已经能够创建所需的结果:
date -d @1427135400 +"%d/%m/%Y"
23/03/2015
这是我试图在脚本中执行的 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 \
}'
运行当前脚本,我得到以下输出:
awk: cmd. line:5: (FILENAME=- FNR=1) fatal: expression for `|' redirection has null string value
【问题讨论】:
-
您的脚本没有
(FILENAME=- FNR=1)部分,请发布整个内容。 -
脚本从管道接收输入,所有的awk代码都在那里。下面的帖子(标记为答案)解决了这个问题。不过感谢您的帮助!
-
我已经发布了您的脚本并进行了一些更改,我得到了我认为正确的输出。
-
去掉所有行尾的反斜杠。其中一半是不必要的,另一半正在破坏您的代码。