우리는 매일 여러 개의 파일을 받습니다(예: 0839_ls2_cdr.dat, 0839_ls2_con.dat, 0839_ls2_ddr.dat 등). 각 파일에는 두 번째 행의 첫 번째 열에 이전 영업일 날짜가 포함되어 있습니다.
데이터베이스에 로드하기 전에 이러한 모든 파일에 이전 근무일이 포함되어 있는지 확인하고 싶습니다.
파일에 이전 날짜가 포함되어 있지 않으면 메시지를 통해 받아야 합니다. "잘못된 날짜 파일"입니다.
날짜 형식은 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
(원래 답변)
한 가지 가능한 접근 방식은 다음과 같습니다.
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"}}