2017-07-05 6 views
0

こんにちは私は6月29日の6日前の月と日をAWKを使用してディレクトリを検索するために試していますが、結果は次のとおりです常に '0' の代わりに、1800AWK(GNU)で制御文で動的に月名を渡す

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

あなたは月の変数に引用符を持っているので、使用します。

date --date="6 days ago" +\%b 

また、AWKでは、と月を参照してください。

gensub("\"","","g",month) 

私はあなたにも持っているの通知をしました削除する必要のある2つの変数代入(-v)の間にカンマを挿入します。完全なソリューションは、次のとおりです。

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 
+0

チャームのように働いた!歓声:) –

1

私はあなたのawkのフィル​​タクエリを使用しようとしましたが、私はそれが動作するように作ることができませんでした。

awkの代わりに、フィルタを構成する日付文字列をgrepに設定して、クエリを書き換えて問題を解決しました。

ls -ltr |egrep "$(date --date="6 days ago" +%b) +$(date --date="6 days ago" +%d | sed 's/^0*//')" |awk '{print $9}'|wc -l 
0

私はカウントする別のアプローチを見つけました。

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 
関連する問題