zoukankan      html  css  js  c++  java
  • 使用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
  • 相关阅读:
    Git SSH Key 生成步骤
    Mac终端(Terminal)自定义颜色,字体,背景
    MAC进入文件夹快捷键
    在Terminal中,如何打开Finder,并显示当前的目录
    mac文件夹怎么重命名?苹果电脑文件夹重命名快捷键
    如何在Mac OS X中开启或关闭显示隐藏文件命令
    怎样将二个路由进行桥接的方法
    关于apache access log 统计的那些事儿
    aaaa
    CodeForces463C Gargari and Bishops(贪心)
  • 原文地址:https://www.cnblogs.com/hsyw/p/15579425.html
Copyright © 2011-2022 走看看