如何从给定目录中查找 csv 文件中包含周六或周日日期的所有行?

如何从给定目录中查找 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

答案1

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

请注意,此脚本需要 GNUawk或,或者mawk这些函数可能不可用。mktime()strftime()

相关内容