验证所有收到的文件是否具有正确的日期

验证所有收到的文件是否具有正确的日期

我们每天都会收到多个文件(即 0839_ls2_cdr.dat、0839_ls2_con.dat、0839_ls2_ddr.dat 等)。每个文件在第二行第一列中包含前一个工作日日期。

我想在将所有这些文件加载​​到数据库之前验证它们是否包含前一个工作日。

如果任何文件不包含先前日期,则应通过消息接收。作为“不正确的日期文件”。

日期格式为:yyyymmdd

有人可以帮我使用 shell 脚本解决这个问题吗?

答案1

更简单的方法(显示为检查当前日期):

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

(原答案)

一种可能的方法:

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 {} +

有关find与其他命令一起使用的更多信息,请参阅:

答案2

$ 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"}}

相关内容