AWK/GAWKを使用してタイムスタンプフィールドをフォーマットする方法

AWK/GAWKを使用してタイムスタンプフィールドをフォーマットする方法

私はGAWKを使って「18-APR-22 11:00:00」のようなタイムスタンプ形式のフィールドを持つCSVファイルを処理しています。 awk "2022-04-18 11:00:00" 出力で日付形式を指定したいと思います。私は "date -d"とgetlineを使ってこれをしました。次の例に示すように。

awk -v FS="," -v OFS="," '
{
  tmp = "date -d \""$1"\" +\"%F %T\""
  tmp | getline var
  close(tmp)
}
{split(FILENAME, arr, ".")}
{print NR, arr[1], tmp, $4, $7, $8, $9}
' 13003.ARR > test.csv

これが動作している間、大容量ファイルの場合は非常に遅くなります。タイムスタンプフィールドを取得してその形式を変更するより良い方法はありますか?

ベストアンサー1

ありがとう、タナシップ。あなたのコメントは正しいです。私は今次を使用しており、何千倍も高速です。 240,000件のレコードを含むcsvを実行するには3秒しかかかりません。

awk -v FS="," -v OFS="," '{
  split(FILENAME, fname, ".")
  split($1, date_time, " ")
  split(date_time[1], date, "-")
  print NR, name[1], "20" date[3] "-" sprintf("%02d", (match("JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC", date[2]) + 2) / 3) "-" date[1] " " date_time[2], $4, $7, $8, $9
}' 13003.ARR > test.csv

おすすめ記事