日付を使用して列を変換してcsvファイルに追加する

日付を使用して列を変換してcsvファイルに追加する

最初の列には、日付/時刻を表す文字列を含むCSVがあります。追加の列を追加し、日付/時刻をエポックに変換したいと思います。
私は以下を試しました:

awk -F "," 'BEGIN{ OFS="," } {$14=$(date -jf "%m/%d/%Y %H:%M:%S %p" $1 "+%s"); print}’ mycsv.csv > test  

私は得る:

awk: illegal field $(0%m/%d/%Y %H:%M:%S %p"1/30/2017 11:14:55 AM"+%s), name "(null)"
 input record number 1, file mycsv.csv
 source line number 1  

このフィールドの日付変換が機能することがわかっているため、いくつかの構文エラーが発生します。
私がしたいことはどうすればいいですか?

ベストアンサー1

私はGNUを持っているdateので、コマンドラインオプションは異なります。しかし、問題はawkの構文のようです。$(...)awkスクリプトではシェルサブプロセス設定を使用できません。system()文字列を渡す関数が必要です。したがって、有効なシェルコマンドをawk文字列として設定する必要があり、それをawkスクリプト内でシステムに渡すことができます。

このような:

awk -F "," 'BEGIN{ OFS="," } {$14=system("date -jf \"%m/%d/%Y %H:%M:%S %p\" \""$1"\" \"+%s\""); print}' mycsv.csv > test

またはより良い読みやすさのために

awk -F "," '
  BEGIN{ OFS="," }
  {
    $14 = system("date -jf \"%m/%d/%Y %H:%M:%S %p\" \"" $1 "\" \"+%s\"");
    print
  }' \
  mycsv.csv > test

おすすめ記事