2

このようなファイルにデータがあります...

405,,,405,15.4,0,04/21/12 14:13:29
402,,,402,15.4,0,04/21/12 14:13:37
404,,,404,15.5,0,2012/04/21 14:14:05
404,,,404,15.4,0,2012/04/21 14:14:11
403,,,403,15.4,0,2012/04/21 14:14:17

最後の列を YYYY/MM/DD hh:mm:ss 形式の日付に変換したい。

一部の行はすでにその形式になっているため、無視する必要があります。

次の awk コマンドを試しましたが、遅いようで、エラーがスローされることもあります

awk -F ',' '{ ("date -d \""$7"\" \"+%Y/%m/%d %T\"") | getline $7; print }' MyFile

これは awk で行う必要はありません。標準の Debian コマンドラインで利用できるユーティリティがあります。

4

2 に答える 2

5

これにはawkではなくsedを使用します。このようなもの:

sed 's@,\(..\)/\(..\)/\(..\) @,20\3/\1/\2 @'

質問が編集される前の古い回答:

コロンをスラッシュに変換するために使用tr : /することも、awk に直接置換を行わせることもできます。しかし、HH/MM/SS が有効な形式であると考える理由は、私にはわかりません。

于 2012-04-21T13:42:06.287 に答える
1

質問にgawkというタグを付けたので、組み込みの時間関数を持っていると仮定します。

awk --re-interval -F, '
    $7 !~ /[[:digit:]]{4}\// {
        split($7, a, "[/ :]");
        strftime("%Y/%m/%d %H:%M:%S", 
            mktime("20" a[3] " " a[1] " " a[2] " " a[4] " " a[5] " " a[6]))}'
    }
    {
        print
    }'
于 2012-04-21T14:07:32.333 に答える