Text-Processing
使用日期轉換列並附加到 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
我知道該欄位的日期轉換有效,所以我在語法上做錯了。
我怎樣才能做我想做的事?
我有 GNU
date
,因此命令行選項對我來說是不同的。但是您的問題似乎是 awk 的語法:您不能$(...)
在 awk 腳本中使用 shell 子程序構造。您需要該system()
函式,該函式會傳遞一個字元串。因此,您需要將有效的 shell 命令構造成一個 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