相关疑难解决方法(0)

gawk/awk:getline的管道日期*有时*不起作用

我正在尝试将日期从一种格式转换为另一种格式:从例如"2005年10月29日"到2005-10-29.我有625个日期列表.我用Awk.

转换有效 - 大部分时间.Hovewer,有时转换根本不会发生,并且应该保持(转换)日期的变量仍未定义.

这总是发生在完全相同的行上.在那些奇怪的行的日期显式地(从Bash shell)运行"date"工作正常(日期被正确转换). - 这些行的文本内容不重要.

为什么会出现这种情况,以及如何修复脚本?
她是:

awk 'BEGIN { FS = "unused" } { 
  x = "undefined";
  "date \"+%Y-%m-%d\" -d " $1 | getline x ;
  print $1 " = " x
}' uBXr0r15.txt \
 > bug-out-3.txt
Run Code Online (Sandbox Code Playgroud)

如果要重现此问题:

  1. 下载此文件:uBXr0r15.txt.
  2. 运行Awk skript.
  3. 在bug-out-3.txt中搜索"undefined".
    ("undefined"在我的电脑上发现了122次.)

然后你可以再次运行脚本,并且(在我的计算机上)bug-out-3.txt保持不变 - 完全相同的日期未定义.

(Gawk 3.1.6版,Ubuntu 9.10.)

亲切的问候,马格努斯

bash awk pipe getline gawk

6
推荐指数
1
解决办法
4111
查看次数

标签 统计

awk ×1

bash ×1

gawk ×1

getline ×1

pipe ×1