毎日複数のファイルを受け取ります(例:0839_ls2_cdr.dat、0839_ls2_con.dat、0839_ls2_ddr.datなど)。各ファイルには、2 行目の最初の列に前の営業日の日付が含まれています。
データベースにロードする前に、これらのすべてのファイルに以前の営業日が含まれていることを確認したいと思います。
ファイルに以前の日付が含まれていない場合は、メッセージを介して受け取る必要があります。 「無効な日付ファイル」です。
日付形式はyyyymmddです。
誰でもシェルスクリプトを使用してこの問題を解決するのに役立ちますか?
答え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
(元の回答)
1つの可能なアプローチは次のとおりです。
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"}}