Retorna determinados campos se uma data corresponder

3
2017-11-27 20:11:13,632 INFO  abc: [java: Thread-389579]: Completed executing command
2017-11-27 20:11:13,632 INFO  abc: [java: Thread-389579]: OK
2017-11-27 20:11:13,632 INFO  abc: [java: Thread-389579]: <completed>
2017-11-27 20:11:13,632 INFO  abc: [java: Thread-389579]: release for adeo/student

Minhas abordagens:

awk 'today="$(date +'%Y-%m-%d')" ( = today) && /Completed executing command/ {cnr = NR} NR == (cnr+3) {gsub(/\/.*/,"",$NF); print $NF}' filename
awk 'today="$(date +'%Y-%m-%d')" ( == today) && /Completed executing command/ { cnr = NR } NR == (cnr+3) { sub("/.*","",$NF); print $NF }' filename

Queremos imprimir apenas adeo e student em duas variáveis diferentes. Condição é se $ 1 é igual a data atual, então deve procurar Completed executing command no arquivo inteiro e, em seguida, pular duas linhas e, em seguida, imprimir adeo e student . (O nome adeo / aluno não é fixo muda, por isso, no caso acima, queremos adeo e aluno, mas se houver algum outro nome, que deve aparecer em seu lugar).

Da nossa abordagem, estamos recebendo apenas adeo . Como podemos conseguir isso usando awk / sed / grep ou qualquer outra ferramenta?

    
por Zanna 28.11.2017 / 02:28

2 respostas

3

Eu concluo dos comentários que você deseja que a saída se pareça com name1=adeo name2=student . Se esse for o caso, tente:

$ awk -v today="$(date +'%Y-%m-%d')"  ' == today && /Completed executing command/ { cnr = NR } cnr && NR == cnr+3 {sub(/\//, " name2=", $NF); print "name1="$NF }' filename
name1=adeo name2=student
    
por John1024 28.11.2017 / 03:08
2

Uma maneira de abordar usando variáveis externas é colocar today no ambiente e usar ENVIRON["today"] em awk . Usar gsub() também é desnecessário, se você quiser apenas obter o nome e a parte do aluno e se eles sempre serão o último item na linha.

$ today=$(date +'%Y-%m-%d') awk ' = ENVIRON["today"] && /Completed executing command/ {cnr = NR} NR == (cnr+3) {print $NF}' input.txt                                
adeo/student
    
por Sergiy Kolodyazhnyy 28.11.2017 / 04:33