我们每天都会收到多个文件(即 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"}}