check_data.sh 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. #!/bin/bash
  2. list_files() {
  3. data_dir=$1
  4. echo "${data_dir} 文件列表:"
  5. ls -l "${data_dir}"
  6. }
  7. check_month_data() {
  8. # 设置目标目录
  9. data_dir1=$1
  10. data_dir2=$2
  11. # 获取上个月日期(格式:yyyymm)
  12. last_month=$(date -d "1 month ago" +%Y%m)
  13. # 存储提取到的所有日期
  14. found_dates=()
  15. # 遍历data目录下的所有文件
  16. while IFS= read -r -d $'\0' file; do
  17. filename=$(basename "$file")
  18. # 使用正则匹配文件名中的6位日期(独立部分)
  19. while IFS= read -r date_str; do
  20. # 验证日期格式(月份01-12)
  21. if [[ $date_str =~ ^([0-9]{4})(0[1-9]|1[0-2])$ ]]; then
  22. found_dates+=("$date_str")
  23. break # 每个文件只取第一个合法日期
  24. fi
  25. done < <(echo "$filename" | grep -oP '(?<!\d)\d{6}(?!\d)')
  26. done < <(find "${data_dir1}" -type f -print0)
  27. # 检查是否包含上个月日期
  28. contains_last_month=0
  29. for date in "${found_dates[@]}"; do
  30. if [[ "$date" == "$last_month" ]]; then
  31. contains_last_month=1
  32. break
  33. fi
  34. done
  35. # 输出最终结果
  36. if [ $contains_last_month -eq 0 ]; then
  37. echo "${data_dir1} 缺失日期:"
  38. echo "${last_month}"
  39. list_files "${data_dir2}"
  40. echo ''
  41. fi
  42. }
  43. check_day_data() {
  44. data_dir1=$1
  45. data_dir2=$2
  46. # 设置日期范围:上个月第一天至昨天
  47. first_day_last_month=$(date -d "last month" +%Y%m01)
  48. yesterday=$(date -d "yesterday" +%Y%m%d)
  49. # 生成日期范围内的所有日期
  50. all_dates=$(
  51. current_date="$first_day_last_month"
  52. while [ "$current_date" -lt "$yesterday" ]; do
  53. echo "$current_date"
  54. current_date=$(date -d "$current_date + 1 day" +%Y%m%d)
  55. done
  56. )
  57. # 提取文件名中的所有日期(格式yyyymmdd)
  58. file_dates=$(
  59. find "${data_dir1}" -type f -name '*_[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]_*' \
  60. | grep -oE '_([0-9]{8})_' \
  61. | sed 's/_//g' \
  62. | sort -u
  63. )
  64. # 找出缺失日期
  65. missing_dates=$(comm -23 <(echo "$all_dates" | sort) <(echo "$file_dates" | sort))
  66. # 输出结果
  67. if [ -n "$missing_dates" ]; then
  68. echo "${data_dir1} 缺失日期:"
  69. echo "${missing_dates}"
  70. list_files "${data_dir2}"
  71. echo ''
  72. fi
  73. }
  74. check_month_data '/data/history/rxftp/clbf' '/data/jzftp/rx/HE_M_DEMP_CLBF'
  75. check_month_data '/data/history/rxftp/wdycbjytjbjcs' '/data/jzftp/rx/HE_M_DEMP_WDYCBJYTJBJCS'
  76. check_month_data '/data/history/rxftp/wdycbjytjcccs' '/data/jzftp/rx/HE_M_DEMP_WDYCBJYTJCCCS'
  77. check_month_data '/data/history/rxftp/xslcytj' '/data/jzftp/rx/HE_M_DEMP_XSLCYTJ'
  78. check_month_data '/data/history/dsjftp/hebei_province' '/data/dsjftp/hebei_province'
  79. check_month_data '/data/history/dsjftp/ten_northern_provinces' '/data/dsjftp/ten_northern_provinces'
  80. check_month_data '/data/history/jzftp/E_M_MTC_HOUSELISTED' '/data/jzftp/E_M_MTC_HOUSELISTED'
  81. check_month_data '/data/history/jzftp/HE_M_MTC_HOUSE' '/data/jzftp/HE_M_MTC_HOUSE'
  82. check_month_data '/data/history/jzftp/HE_M_MTC_VEHICLE_CHARGE' '/data/jzftp/HE_M_MTC_VEHICLE_CHARGE'
  83. check_month_data '/data/history/jzftp/HE_M_MTC_VEHICLE_CLLQ' '/data/jzftp/HE_M_MTC_VEHICLE_CLLQ'
  84. check_month_data '/data/history/jzftp/HE_M_MTC_VEHICLE_DEBX' '/data/jzftp/HE_M_MTC_VEHICLE_DEBX'
  85. check_month_data '/data/history/jzftp/HE_M_MTC_VEHICLE_INSPECTION' '/data/jzftp/HE_M_MTC_VEHICLE_INSPECTION'
  86. check_month_data '/data/history/jzftp/HE_M_MTC_VEHICLE_INSURANCE' '/data/jzftp/HE_M_MTC_VEHICLE_INSURANCE'
  87. check_month_data '/data/history/jzftp/HE_M_MTC_VEHICLE_MAINTENANCE' '/data/jzftp/HE_M_MTC_VEHICLE_MAINTENANCE'
  88. check_month_data '/data/history/jzftp/HE_M_MTC_VEHICLE_OIL' '/data/jzftp/HE_M_MTC_VEHICLE_OIL'
  89. check_month_data '/data/history/jzftp/HE_M_MTC_VEHICLE_OTHER' '/data/jzftp/HE_M_MTC_VEHICLE_OTHER'
  90. check_month_data '/data/history/jzftp/HE_M_MTC_VEHICLE_RENT' '/data/jzftp/HE_M_MTC_VEHICLE_RENT'
  91. check_month_data '/data/history/jzftp/HE_M_MTC_VEHICLE_SCGY' '/data/jzftp/HE_M_MTC_VEHICLE_SCGY'
  92. check_day_data '/data/history/rxftp/cljbxx' '/data/jzftp/rx/HE_D_DEMP_CLJBXX'
  93. check_day_data '/data/history/rxftp/HE_D_DEMP_WDYCBJRTJBJCS' '/data/jzftp/rx/HE_D_DEMP_WDYCBJRTJBJCS'
  94. check_day_data '/data/history/rxftp/HE_D_DEMP_WDYCBJRTJCCCS' '/data/jzftp/rx/HE_D_DEMP_WDYCBJRTJCCCS'
  95. check_day_data '/data/history/rxftp/xslcrtj' '/data/jzftp/rx/HE_D_DEMP_XSLCRTJ'
  96. check_day_data '/data/history/rxftp/yjbjrtj' '/data/jzftp/rx/HE_D_DEMP_YJBJRTJ'