Valide todos os arquivos recebidos com data correta

0

Diariamente recebemos vários arquivos (por exemplo, 0839_ls2_cdr.dat, 0839_ls2_con.dat, 0839_ls2_ddr.dat, etc). Cada arquivo contém uma data anterior do dia útil na segunda linha, primeira coluna.

Desejo validar todos esses arquivos que contêm o dia útil anterior do negócio ou não antes de carregá-los no banco de dados.

Se algum arquivo não contiver data anterior e recebido, deverá passar pela mensagem. Como "arquivo de data incorreto".

O formato da data é: aaaammdd

Alguém poderia me ajudar a resolver isso usando o shell script?

    
por jay 14.11.2017 / 05:55

2 respostas

1

Abordagem mais simples (mostrada com uma verificação da data atual ):

for f in [0-9][0-9][0-9][0-9]_ls2_???.dat; do
  sed '1d;2q' "$f" | grep -q "^$(date +%Y%m%d)" &&
    load into database "$f"
done

(resposta original)

Uma abordagem possível:

find /path/to/ingest/directory -type f -name '????_ls2_???.dat' \
  -exec awk -v prev_bus_day="$(command that prints previous business day as yyyymmdd)" \
  -v default_exit=1 '
    NR == 2 {
      if ($1 == prev_bus_day) {
        default_exit = 0
      }
      exit
    }
    END {
      exit default_exit
    }
  ' {} \; -exec command to load multiple files into database {} +

Para ler mais sobre o uso de find com outros comandos, consulte:

por 14.11.2017 / 06:39
-1
$ cat l.txt
10 101117
20171113 30
#!/bin/bash
i=date +%Y%m%d -d "1 days ago"

awk 'NR == "2" '{print $0}' l.txt. | awk -v i="$i" '{if ($1 == i) {print "validate"}else{print "invalid date"}}
    
por 14.11.2017 / 07:19