Awk
在 macOS 上使用 awk/gawk 轉換日期格式
我有數百萬行數據,我的老闆要求我為它們重新格式化。
格式為:
06/28/2022,04:00,142.01,142.38,141.59,142.15,3151 06/28/2022,04:01,142.1,142.1,142.1,142.1,196
我需要將第一個日期欄位重新格式化為:
20220628,04:00,142.01,142.38,141.59,142.15,3151 20220628,04:01,142.1,142.1,142.1,142.1,196
%Y%m%d
我有以下內容:
gawk -F"," '{OFS=","; $1=strftime("%Y%m%d", $1); print $0}' AAPL.txt > AAPL.csv
但奇怪的是它有效,但產生的日期是 1969 年。
19691231,04:00,142.01,142.38,141.59,142.15,3151 19691231,04:01,142.1,142.1,142.1,142.1,196
我不明白為什麼。我選擇
gawk
是因為awk
在 MacOS 上沒有,strftime
並且在外部呼叫會date
產生巨大的性能影響。
您的程式碼沒有按照您的期望執行,因為 GNU
awk
strftime()
期望將 Unix 時間戳作為其第二個參數。它無法解析任意日期時間字元串。但是,我們在這裡並不需要
strftime()
。$ awk -F , 'BEGIN { OFS=FS } { split($1,a,"/"); $1 = a[3] a[1] a[2] }; 1' file 20220628,04:00,142.01,142.38,141.59,142.15,3151 20220628,04:01,142.1,142.1,142.1,142.1,196
這將每一行輸入視為簡單的逗號分隔欄位,並將第一個這樣的欄位拆分
/
為數組a
。然後將第一個欄位重新形成為以所需順序連接的數組元素。
1
程式碼末尾的單獨awk
導致輸出修改的記錄。這適用
awk
於 macOS 上的預設設置。它不需要特殊的日期格式化函式,因為它將輸入日期視為字元串並簡單地對其進行重組。關於日期的唯一假設是它始終採用DD/MM/YYYY
輸入格式,並且應該採用YYYYMMDD
輸出格式。