Text-Processing

使用日期轉換列並附加到 csv 文件

  • February 1, 2017

我有一個 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

引用自:https://unix.stackexchange.com/questions/341707