• 使用awk比较两个文件的内容


    干货记录

    [Linux] 使用awk比较两个文件的内容

    当需要比较A , B两个文件 , A文件中存在 , 并且把也在B文件中存在的行去除掉 , 可以使用这个awk的用法来
    
     awk  '{if(ARGIND==1) {val[$0]}else{if($0 in val)  delete val[$0]}}END{for(i in val) print i}' A B
    
    使用awk的同时处理多文件功能,配合数组变量来进行处理
    先扫描文件A,把文件A中的每行作为数组的key放入数组
    再扫描文件B,判断B中的每行是否存在于数组中,如果存在就删除这个数组元素
    最后统一打印数组中的key
    

    文件准备

    创建两个文件,分别为a.txt和b.txt,它们所含内容分别为:

    a.txt b.txt
    1-wfhune2-chdamnsbchj3-uyr92fiubkqw5-cgvdnsb 2-djyv4-dvcahsgdb5-wvchdfyt

    普通用法,整行对比

    命令 diff a.txt b.txt grep -f a.txt b.txt grep -vf a.txt b.txt
    解释 比较两个文件 取两个文件中都有的行 取b文件中有,但a文件中没有的行
    结果 1,4c1,3< 1-wfhune< 2-chdamnsbchj< 3-uyr92fiubkqw< 5-cgvdnsb---> 2-djyv> 4-dvcahsgdb 2-djyv4-dvcahsgdb5-wvchdfyt

    高级用法,每行关键部分对比

    回顾一下两个文件中的内容,格式都是 x-yyyy这种格式,我们认为x为键,yyyy为值。现在我们只想比较x,而不关心yyyy。

    该怎么办呢?

    命令 grep -vf <(cut -d - -f 1 a.txt) <(cat b.txt) grep -vf <(awk -F"-" '{print $1}' a.txt) <(cat b.txt)
    解释 <() 用于命令嵌套。cut -d - -f 1 a.txt,其中参数-d 用于定义分隔符,参数-f 用于定义分割后要提取第几段文本。比如这里定义分隔符为"-",并提取分割后的第一段文本。 这里只是用awk命令替换了cut命令,作用相同。awk 的 -F参数用于定义分隔符,printf $X 提取分割后的第X段文本。
    结果 4-dvcahsgdb 4-dvcahsgdb
  • 相关阅读:
    关闭防火墙,仍然无法访问80端口 centos
    apache添加虚拟主机(windows下)
    PHP实现文件下载
    chmod 777 修改权限之后,文件夹颜色变绿:解决方案
    element ui table(表格)点击一行展开
    vue中eventbus 多次触发的问题
    console.log、toString方法与js判断变量类型
    另一个维度:cocos-2d VS vue
    浏览器内置的base64方法
    H5网页涂鸦canvas
  • 原文地址:https://www.cnblogs.com/hsyw/p/15579425.html
Copyright © 2020-2023  润新知