生产问题处理0509——文件某列出现重复,用shell找出重复行
生产问题处理0509
生产问题:
本系统给出的文件,会在某个情况下,会第四列出现2条相同数据,导致另一个系统处理异常。
接到系统警告之后,立即找出重复的数据,删除其中一条,删除后重新执行任务。
批量是以Java写的,没法直接在生产修改代码,需要等待投产修复,距离下次投产还有一段时间,需要做一些临时措施,不能每次出问题都来处理。
处理方案:
- 删除重复的数据,给出新文件,通知对方系统继续处理。
- 修改配置文件,将批量的输出目录指定到一个临时目录,避免文件被FCC直接传输到对方系统。
- 写个 shell 脚本处理输出的文件,再将处理完的文件移动到指定目录。
- 下次投产修复问题,并将临时措施移除。
代码:
文件数据
FA20200523213532000000321,20200523,213532,u86gfd2ed02k7gw4ruj2y65thji976re,1,0
FA20200523223344000000453,20200523,223344,u86gfd2ed02k7gw4ruj2y65thji976re,1,1
第四列数据出现重复
#!/bin/sh
# 重复数据临时处理脚本
#临时文件目录
temp_path=/app/data/output/temp/
#最终文件输出目录
dest_path=/app/data/output/
#删除重复数据
for afile in `find $temp_path -name "voucher_return_*"`; do
# 找出重复的coupon_id
duplicate_file=${temp_file}/duplicate.txt
awk -F, 'print $4' $afile | sort | uniq -d > $duplicate_file
# 删除匹配的第一条重复数据
for line in `cat $duplicate_file`; do
echo "duplicate:"$line
sed -i '0,/^.*'"$line"'.*$/{//d}' $afile
done
done
#移动文件到指定目录
for afile in `find $temp_file -name "voucher_*"`; do
mv $afile ${dest_path}
done
#清除临时文件
rm -f $duplicate_file
浙公网安备 33010602011771号