日付をある形式から別の形式に変換しようとしています。たとえば、「2005 年 10 月 29 日」から 2005-10-29 に変換します。625 の日付のリストがあります。オークを使っています。
ほとんどの場合、変換は機能します。ただし、場合によっては変換がまったく行われず、(変換された) 日付を保持するはずの変数が未定義のままになることがあります。
これは常にまったく同じ行で発生します。これらの奇妙な行の日付に対して (Bash シェルから) 明示的に「date」を実行すると、問題なく動作します (日付は適切に変換されます)。-- 重要なのは、それらの行のテキストの内容ではありません。
この動作の理由と、スクリプトを修正するにはどうすればよいですか?
彼女は:
awk 'BEGIN { FS = "unused" } {
x = "undefined";
"date \"+%Y-%m-%d\" -d " $1 | getline x ;
print $1 " = " x
}' uBXr0r15.txt \
> bug-out-3.txt
この問題を再現したい場合:
- このファイルをダウンロードします: uBXr0r15.txt。
- Awk スクリプトを実行します。
- bug-out-3.txt で「undefined」を検索します。
(「未定義」は、私のコンピューターで 122 回見つかりました。)
その後、スクリプトを再度実行すると、(私のコンピューターでは) bug-out-3.txt は変更されず、まったく同じ日付が未定義のままになります。
(Gawk バージョン 3.1.6、Ubuntu 9.10。)
敬具、マグナス