Passar o nome do mês dinamicamente no AWK (GNU) com a declaração de controle

0

Oi eu estou tentando abaixo comando para coincidir mês e dia (de 6 dias atrás, que é 29 de junho) para procurar um diretório usando o AWK, mas o resultado é sempre '0' em vez disso, é suposto ser em torno de 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

tentou isso também

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

mas está funcionando se eu codificar o mês

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

Por favor, sugira o que me falta no código?

    
por Rohit Nimmala 05.07.2017 / 08:59

2 respostas

0

Em geral, analisar a saída de ls não é uma boa ideia. Além disso, você parece apenas estar interessado no número de arquivos, o que torna sua abordagem desnecessariamente complicada. Eu sugeriria algo ao longo destas linhas:

find -maxdepth 1 -printf "%TY-%Tm-%Td\n" | grep -c $(date -d "6 days ago" +'%Y-%m-%d')
    
por 05.07.2017 / 10:51
0

Eu descobri o meu erro. Eu encontrei outro jeito de fazer isso funcionar.

A abordagem real, versão corrigida:

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

Aqui por mês, precisamos usar '\'.

Outra abordagem

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
    
por 07.07.2017 / 14:03