特定のディレクトリの土曜日または日曜日の日付を含む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タイムスタンプ値を設定します。

次に、関数が曜日を1(月曜日)と7(日曜日)の間の10進整数として返すようにするstrftime()書式文字列を使用します。%u

最後の行は週末の値をテストし、テストが成功すると現在の行を印刷します。行番号だけを出力したい場合はに変更してくださいday >= 6 { print FNR }

あなたはこうして実行します

$ awk -f script.awk myfile.csv

このスクリプトにはGNUawkまたはGNUが必要です。そうしないと、mawkこれらの機能を使用できない可能性があります。mktime()strftime()

おすすめ記事