我有一個包含以下內容的 CSV 檔案:
Name,Price,Date,SKU
我的日期已格式化yyy-mm-dd,我想從中獲取檔案中的所有專案2020-01并將它們放在自己的檔案中的不同目錄中。
結果檔案一開始不存在,但我需要在 3 個 csv 檔案上運行它,以便在最后 2 次運行中存在。我想仍然保留舊資料,而只是將 2020 年和 01 月的所有資料添加到 CSV 檔案中。
我現在擁有的:
awk -F, '$3 ~ /2020-01/ {print}' sourceFile.csv > data/2020/01/destonationFile.csv
我曾嘗試使用 grep 和awk,但不知道如何正確檢查日期是否正確。任何建議都有幫助。
樣本資料作為源 - sourceData.csv
Name,Price,Date,SKU
pixel 5, 20000, 2020-01-04, 124124
iphone 8, 35000,2019-12-11, 124125
note 20 , 50000, 2020-04-16, 124127
note 20 ultra, 60000, 2020-01-12, 124128
s 8, 15000, 2017, 124129
樣本資料作為輸出 - destonationFile.csv
pixel 5, 20000, 2020-01-04, 124124
note 20 ultra, 60000, 2020-01-12, 124126
uj5u.com熱心網友回復:
一些想法。(1) 你真的很親密,你的想法是正確的。(2) 您的資料檔案格式在會導致問題的地方(例如和)同時包含','和作為分隔符。(3) 為了在欄位的開頭始終如一地識別,您希望將您的 REGEX錨定到開頭。此外,是 采取的默認操作,因此如果您沒有要應用的其他規則,您可以簡單地省略它。", ""35000,2019-12-11""20000, 2020-01-04""2020-01..."'^'printawk
將它們放在一起并檢查檔案中的第一條記錄FNR==1以獲取目標檔案的標題,您可以執行以下操作:
awk -F",|, " 'FNR==1 || $3~/^2020-01/' sourceData.csv
Where-F",|, "允許您使用備用欄位分隔符來處理','和", "分隔符。
由于您正在輸出與您的選擇標準匹配的整個記錄??,因此您可以確保這些記錄不會被修改。只要選擇按您的意圖作業,您的輸出檔案將包含從輸入檔案中選擇的記錄的相同內容。
示例使用/輸出
使用您的資料sourceData.csv,以上將產生:
$ awk -F",|, " 'FNR==1 || $3~/^2020-01/' sourceData.csv
Name,Price,Date,SKU
pixel 5, 20000, 2020-01-04, 124124
note 20 ultra, 60000, 2020-01-12, 124128
如果您不想要目標檔案中的標題,只需洗掉該"FNR==1 || "部分
如果您有任何問題,請告訴我。
uj5u.com熱心網友回復:
如果您的 CSV 格式非常簡單(欄位中沒有逗號,沒有引號欄位)并且您的 3 個輸入檔案是sourceFile.csv,sourceFile2.csv和sourceFile3.csv,您可以嘗試對已有的檔案進行以下小修改:
$ awk -F, '$3 ~ /^ *2020/ {print}' sourceFile.csv sourceFile2.csv sourceFile3.csv > data/2020/01/destonationFile.csv
但是,如果您想從 year 2020(不僅僅是 January 2020)中提取所有記錄,則輸出應該是類似data/2020/destonationFile.csv.
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/528127.html
標籤:linux重击
下一篇:如何列印檔案中的最高/最長值
