Files
如何從包含週六或週日日期的給定目錄中查找 csv 文件中的所有行?
我有一個包含一些 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
請注意,此腳本需要 GNU
awk
或mawk
, 或函式mktime()
,並且strftime()
可能不可用。