求一个核对文件MD5值的shell脚本

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求一个核对文件MD5值的shell脚本相关的知识,希望对你有一定的参考价值。

我有源文件的MD5值文件在/etc/md5db中以如下的方式存在:
d41d8cd98f00b204e9800998ecf8427e /usr/g/service/license/.READYTOGO
447c66c78ab655e76b18e6d68e37fc65 /root/install.log
我的需求是需要最MD5比对的文件是以列表形式存放,这样可以随时添加和删除需要对比的文件,例如
我需要对比的文件存放在”list“文件中:
/etc/GI_Settings.cfg
/etc/GradDependFiles.cfg
/usr/g/service/log/CFGbkup.log
/usr/g/service/log/CRC_files

那么问题来了:我怎么将”list“文件作为参数的来源,将里面的文件作为参数来进行MD5的对比

谢谢各位,不胜感激

参考技术A #!/bin/sh
for file in `cat list.txt`;do
oldmd5=`grep $file md5.txt|awk '$1'`
newmd5=`md5sum $file|awk '$1'`
if [[ $oldmd5 == $newmd5 ]];then
echo $file is no changed;
else
echo $file had changed;
fi
done本回答被提问者和网友采纳
参考技术B [root@localhost 10]# cat file
/etc/GI_Settings.cfg 
/etc/GradDependFiles.cfg
/usr/g/service/log/CFGbkup.log
/usr/g/service/log/CRC_files
[root@localhost 10]# cat c
#!/bin/bash
while read line
do
    echo $line#你可以在这里进行md5比对
done<file
[root@localhost 10]# sh c
/etc/GI_Settings.cfg
/etc/GradDependFiles.cfg
/usr/g/service/log/CFGbkup.log
/usr/g/service/log/CRC_files

Python3.7 比较两个Excel文件指定列的值的异同,并将核对结果写入Excel中

背景:

最近工作中需要核对客户的历史数据,

接近400行,需要核对的列有15列,

肉眼核对简直要吐血

心想着反正在学python呢

人生苦短

何不用python写个脚本

帮助我核对

我省出时间来做些更有意义的事情呢

 

前提:

我需要核对的两份Excel有以下特点:

  1. 有共同的主键
  2. 两份Excel的结构不尽相同,仅需要核对源文件47列中的15列,这些列在目标文件中都能找到

 

主要思路

将两个文件的主键作为键,将要核对的列作为值,保存到字典中

然后再进行比较

 

实现代码

import xlrd
import xlwt
import time


origin_dict = {}  # 初始化,用于保存源文件{key(主键):value(需要核对的列值)}
target_dict = {}  # 初始化,用于保存目标文件{key(主键):value(需要核对的列值)}

# 放在函数外部声明 会报错 还不晓得原因
# success = 0
# fail = 0


def compare_excel(ori_path,tar_path,col_ori,col_tar):
    ‘‘‘
    ori_path:用于存放源文件
    tar_path:用于存放目标文件
    col_ori:源文件中需要比较的列
    col_tar:目标文件中需要比较的列
    ‘‘‘
    success = 0  # 核对无差异的个数
    fail = 0  # 核对结果有差异的个数
    row_res = 0  #要写入的文件的行

    # 分别打开源文件与目标文件
    wb_ori = xlrd.open_workbook(ori_path)
    wb_tar = xlrd.open_workbook(tar_path)
    # 新建一个excel,用于存放核对结果
    wb_res = xlwt.Workbook()  

    # 分别获取源文件与目标文件的sheet
    sheet_ori = wb_ori.sheet_by_index(0)
    sheet_tar = wb_tar.sheet_by_index(0)
    # 新建一名称为result的sheet页,用于存放核对具体结果
    sheet_res = wb_res.add_sheet(result)

    # 获取源文件中由主键、需核对列组成的键值对,放入字典中
    for row_ori in range(1,sheet_ori.nrows):
        cell_ori_key = sheet_ori.cell_value(row_ori,0)  #因我的源文件的主键位于第0列,故该列未参数化,大家可以视自己实际情况进行优化
        cell_ori_value = sheet_ori.cell_value(row_ori,col_ori)
        origin_dict[cell_ori_key] = cell_ori_value
    # print(‘源文件获取成功‘)
    # print(‘源文件如下:%s‘ % origin_dict)

    # 获取目标文件中由主键、待核对列组成的键值对,放入字典中
    for row_tar in range(1,sheet_tar.nrows):
        cell_tar_key = sheet_tar.cell_value(row_tar,0)
        cell_tar_value = sheet_tar.cell_value(row_tar,col_tar)
        target_dict[cell_tar_key] = cell_tar_value
    # print(‘目标文件获取成功‘)
    # print(‘目标文件如下:%s‘ % target_dict)

    # 核对逻辑
    try:
        for i in origin_dict.keys():  # 获取源文件字典的键
            if target_dict.get(i) == origin_dict.get(i):  # 对比两个字典中相同键的值
                success += 1  # 值相等,则无差异数+1
                sheet_res.write(row_res+1,0,i)  # 将键写入结果文件的第0列
                sheet_res.write(row_res+1,1,你俩长一样)  #将核对无差异结果写入结果文件的第1列
                row_res += 1  # 结果文件行数+1
                print(金融产品 %s 核对无差异% i)
            else:
                fail +=1  # 值不相等,则有差异数+1
                sheet_res.write(row_res+1,0,i) 
                sheet_res.write(row_res+1,1,核对有差异:源文件的值为:%s,目标文件的值为:%s % (origin_dict.get(i),target_dict.get(i)))  # #将核对有差异结果写入结果文件的第1列
                row_res += 1  # 结果文件行数+1
                print(金融产品 %s 核对有差异:源文件的值为:%s,目标文件的值为:%s % (i,origin_dict.get(i),target_dict.get(i)))
                wb_res.save(result.xlsx)  # 保存结果文件
        print(time.strftime(%Y-%m-%d %H-%M-%S,time.localtime())+核对完成,共核对 %d 条,其中无差异 %d 条, 有差异 %d条 % (len(origin_dict),success,fail))
    except Exception as error:
        print(str(error))


compare_excel(C111111.xlsx,O222222.xlsx,3,2)  # 核对源文件第4列,目标文件第3列

 

后续:

代码还有很多优化的空间:

比如说源文件中有的键目标文件中没有,如何提示?

比如说能否一次比较多个列的值

比如扩展成双主键/多主键,该如何比对?

 

如果你有方法或思路,可以跟我这个小白一起交流

Python 我是越学越爱 

 

以上是关于求一个核对文件MD5值的shell脚本的主要内容,如果未能解决你的问题,请参考以下文章

自动校验文件夹及其内容shell程序(md5 校验文件夹中所有数据)

求shell脚本加密方式,要权限那种,即是解密也要权限,谢谢。 gzexe、shc等方法试过了。

Shell脚本对Linux进行文件校验

linux下shell脚本命令

Shell脚本

shell脚本可以加密吗