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
  • 相关阅读:
    [转]initrd.img, vmlinux
    [转]关于arm 上kernel, qemu起VM等
    [转]overlayFS
    [转]virtiofs
    [转] dynamic DMA mapping
    [转] cpu亲和性
    [转] /dev/shm
    huginn,n8n,ifttt
    ipfs---protocol, filesystem,web p2p,cdn
    gpg,pgp--
  • 原文地址:https://www.cnblogs.com/hsyw/p/15579425.html
Copyright © 2011-2022 走看看