Linux中比较两个数据文件的差异

作者:数据小雄 , 分类:Linux , 浏览:1193 , 评论:1

做数据核验时,当txt数据文件较小时,我们可以将数据导入到Excel中进行比对处理,但当文件过大时,Excel是无法处理的,此时可以将数据文件放在服务器上进行操作处理。

使用工具:SecureCRTPortable、腾讯云服务器(Linux)

下面两个文件数据仅测试使用。点击下载测试数据>>Linux文本比对测试数据.rar

ods.txt

code    type    biaozhi    no
001    包月收费    P    卡号
002    不收费    P    账号
003    包月收费    P    卡号
004    不收费    C    账号
005    包月收费    C    账号
006    不收费    P    账号
007    包月收费    C    账号
008    包月收费    P    账号
009    包月收费    C    卡号
011    包月收费    P    卡号

ryc.txt

code    type    biaozhi    no
001    包月收费    P    卡号
002    不收费    P    账号
003    包月收费    P    卡号
004    不收费    C    账号
005    包月收费    C    账号
006    不收费    P    账号
007    包月收费    C    账号
008    包月收费    P    账号
010    包月收费    P    卡号

两个文件中code均为主键,数据以空格作为分隔符。


1、将文件上传至服务器(sz)

rz

image.png

image.png


2、查看前10条数据(cat)
cat  ods.txt | head - 10
cat  ryc.txt | head - 10

正在上传...

查看两个文件数据发现,数据是乱码的。


3、查看文件编码(file)
file -i ods.txt
file -i ryc.txt

image.png

发现两个文件的编码均为:utf-16le


4、修改文件编码(iconv)
iconv -f utf-16le -t UTF-8 ods.txt >> ods_utf8.txt
iconv -f utf-16le -t UTF-8 ryc.txt >> ryc_utf8.txt

将ods.txt和ryc.txt两个文件的编码更改为utf8格式,并另存为ods_utf8.txt和ryc_utf8.txt

两个>>表示追加;一个>表示覆盖。

注意:若修改后显示还是乱码,需进行操作:选项→会话选项→外观→字符编码:UTF-8

image.png

file -i ods_utf8.txt
file -i ryc_utf8.txt
cat  ods_utf8.txt | head - 10
cat  ryc_utf8.txt | head - 10

image.png


5、去掉标题行(sed)

从上面显示的前10行数据中,发现第一行为标题行,所以我们需要去掉标题。

sed -i '1d' ods_utf8.txt
sed -i '1d' ryc_utf8.txt

image.png


6、提取主键(awk)
第一个字段code为主键,且数据间分隔符号为空,我们将主键提取出来并生成新文件。
awk -F " " '{print $1}' ods_utf8.txt > ods_key.txt
awk -F " " '{print $1}' ryc_utf8.txt > ryc_key.txt

image.png


7、找出文件差异(diff或grep)
方法一:diff
diff ods_2.txt ryc_2.txt

image.png

009、011表示ods有,ryc无;010表示ods无,ryc有。

将差异数据下载下来:

diff ods_key.txt ryc_key.txt > diff.txt
sz diff.txt

方法二:(grep)

ods无,ryc有:
grep -vwf ods_key.txt ryc_key.txt

ryc无,ods有:

grep -vwf ryc_key.txt ods_key.txt

image.png

将差异数据下载下来:

grep -vwf ods_key.txt ryc_key.txt > ryc_diff.txt
grep -vwf ryc_key.txt ods_key.txt > ods_diff.txt
sz ryc_diff.txt ods_diff.txt


8、字段拼接比对
上面只是通过主键找出了差异,存在不严谨性,若是其他字段也有差异呢?
此处我们可以将所有字段拼接成一个字段的方法来比对。
ods_utf8.txt和ryc_utf8.txt两个文件的所有字段拼接成一个字段,且中间用下划线拼接,字段顺序一致。
awk -F " " '{print $1"_"$2"_"$3"_"$4}' ods_utf8.txt > ods_pinjie.txt
awk -F " " '{print $1"_"$2"_"$3"_"$4}' ryc_utf8.txt > ryc_pinjie.txt

然后按前面主键比对方法进行比对即可,不再赘余。

image.png

—————————————————————————

【版权申明】

如非注明,本站文章均为 数据小雄 原创,转载请注明出处:数据小雄博客,并附带本文链接,谢谢合作!

本文地址:http://zhangzhengxiong.com/?id=95。

—————————————————————————

亲!有什么想法呢?
  • 流泪

    0

  • 打酱油

    0

  • 开心

    2

  • 鼓掌

    0

  • 恐怖

    0

 

发表评论

必填

选填

选填

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

已有1位网友发表了看法:

1#访客  2018-02-03 17:30:53 回复该评论
SecureCRTPortable、腾讯云服务器(Linux)
新浪微博
米店
标签列表
@数据小雄 | 专注于数据分析、挖掘、可视化案例分享