制御ステートメントを使用してAWK(GNU)から月名を動的に渡す

制御ステートメントを使用してAWK(GNU)から月名を動的に渡す

こんにちは、AWKを使用してディレクトリを検索するために月と日(6日前、6月29日)を一致させるために以下のコマンドを使用しようとしていますが、結果は予想通り約1800ではなく常に「0」です。

ls -ltr /test/output|awk  -v month="$(date --date="6 days ago" +"\"%b\"")", -v day="$(date --date="6 days ago" +%d)"  '$6 ==month && $7==day {print $9}'|wc -l

また、これを試しました。

ls -ltr /test/output|awk  -v month="$(date --date="6 days ago" +%b)", -v day="$(date --date="6 days ago" +%d)"  '$6 ==month && $7==day {print $9}'|wc -l

しかし、月をハードコーディングすると機能します

ls -ltr /test/output|awk  -v month="$(date --date="6 days ago" +"\"%b\"")", -v day="$(date --date="6 days ago" +%d)"  '$6 =="Jun" && $7==day {print $9}'|wc -l

コードに欠けている部分を提案してください。

答え1

一般に、解析された出力lsは良い考えではありません。さらに、ファイルの数だけに興味があるようで、アプローチが不必要に複雑になりました。私は次のことを提案します:

find -maxdepth 1 -printf "%TY-%Tm-%Td\n" | grep -c $(date -d "6 days ago" +'%Y-%m-%d')

答え2

私の間違いを見つけました。私はそれを動作させる別の方法を見つけました。

実際の方法、修正版:

ls -ltr /test/output|awk  -v month="$(date --date="6 days ago" +\%b)" -v day="$(date --date="6 days ago" +%d)" '$6 ==month && $7==day {print $9}'|wc -l

ここでは、月を表す '\'を使用する必要があります。

他の方法

yesterday_date=`date --date="6 days ago" +'%Y%m%d'`
start_date=${yesterday_date}"0000"
end_date=${yesterday_date}"2359"
temp_start_date_file=$HOME/tmpstartfile
temp_end_date_file=$HOME/tmpendfile
touch -t $start_date ${temp_start_date_file}
touch -t $end_date ${temp_end_date_file}

cd /test/output
find . -type f -newer ${temp_start_date_file} ! -newer ${temp_end_date_file} -ls | wc -l

関連情報