最初の列には、日付/時刻を表す文字列を含む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