Files

如何從包含週六或週日日期的給定目錄中查找 csv 文件中的所有行?

  • December 18, 2019

我有一個包含一些 csv 文件的目錄。我想查找包含日期為星期六或星期日的文件和行號。日期的格式為 dd.mm.2019。下面的程式碼是否正確?還有其他方法嗎?

grep -n '^5.1.2019|^6.1.2019|^12.1.2019|^13.1.2019|^19.1.2019|^20.1.2
019|^26.1.2019|^27.1.2019|^2.2.2019|^3.2.2019|^9.2.2019|^10.2.2019|^16.2.2019|^17.2.2019|^23.2.2019|^24.2.2019|^2.3.2019|^3.3.2019|^9.3.2019|^10.3.2019|^16.3.2019|^17.3.2019|^23.3.2019|^24.3.2019|^30.3.2019|^31.3.2019|^6.4.2019|^7.4.2019|^13.4.2019|^14.4.2019|^20.4.2019|^21.4.2019|^27.4.2019|^28.4.2019|^4.5.2019|^5.5.2019|^11.5.2019|^12.5.2019|^18.5.2019|^19.5.2019|^25.5.2019|^26.5.2019|^1.6.2019|^2.6.2019|^8.6.2019|^9.6.2019|^15.6.2019|^16.6.2019|^22.6.2019|^23.6.2019|^29.6.2019|^30.6.2019|^6.7.2019|^7.7.2019|^13.7.2019|^14.7.2019|^20.7.2019|^21.7.2019|^27.7.2019|^28.7.2019|^3.8.2019|^4.8.2019|^10.8.2019|^11.8.2019|^17.8.2019|^18.8.2019|^24.8.2019|^25.8.2019|^31.8.2019|^1.9.2019|^7.9.2019|^8.9.2019|^14.9.2019|^15.9.2019|^21.9.2019|^22.9.2019|^28.9.2019|^29.9.2019|^5.10.2019|^6.10.2019|^12.10.2019|^13.10.2019|^19.10.2019|^20.10.2019|^26.10.2019|^27.10.2019|^2.11.2019|^3.11.2019|^9.11.2019|^10.11.2019|^16.11.2019|^17.11.2019|^23.11.2019|^24.11.2019|^30.11.2019|^1.12.2019|^7.12.2019|^8.12.2019|^14.12.2019|^15.12.2019|^21.12.2019|^22.12.2019|^28.12.2019|^29.12.2019$' *.csv
BEGIN { FS = "," }
{
       split($1, a, ".")
       timestamp = mktime(sprintf("%.4d %.2d %.2d 00 00 00", a[3], a[2], a[1]))
       day = strftime("%u", timestamp)
}

day >= 6

此 GNU awk(或mawk)腳本將以您在問題中指定的格式從第一個逗號分隔欄位中讀取日期。它將將該欄位拆分並呼叫mktime()以構造與每個讀取日期的午夜相對應的 Unix 時間戳值。

然後,它使用strftime()格式字元串 ,%u使函式將工作日作為 1(星期一)和 7(星期日)之間的十進制整數返回。

最後一行測試週末的值,如果測試成功,則列印目前行。如果您只想列印行號,請將其更改為day >= 6 { print FNR }.

你會像這樣執行

$ awk -f script.awk myfile.csv

請注意,此腳本需要 GNUawkmawk, 或函式mktime(),並且strftime()可能不可用。

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