Передавать имя месяца динамически в AWK (GNU) с помощью управляющего оператора

Привет, я пробую команду ниже, чтобы сопоставить месяц и день (6 дней назад, 29 июня), поиск по каталогу с помощью AWK, но результат всегда «0», вместо этого предполагается около 1800.

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

Пожалуйста, предложите, что мне не хватает в коде?

0
05.07.2017, 09:59
2 ответа

В общем, синтаксический анализ вывода lsне является хорошей идеей. Кроме того, вас, кажется, интересует только количество файлов, что делает ваш подход излишне сложным. Я бы предложил что-то в этом роде:

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

Я понял свою ошибку. Я нашел другой способ заставить его работать.

Актуальный подход, исправленная версия:

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
0
28.01.2020, 04:44

Теги

Похожие вопросы