【问题标题】:How to diff and show where is the different in a line between two files如何区分并显示两个文件之间的行中的不同之处
【发布时间】:2013-06-26 01:27:27
【问题描述】:

文件a-

aaabaaa

文件 b-

aaaaaa

请求输出样本-

aaa-aaa

*- 表示缺少一个字母

如何使用基本的 unix 命令或 shellscript 或 sql 或 4gl 代码来做到这一点? (只需任意 1 个)

【问题讨论】:

    标签: sql unix 4gl


    【解决方案1】:

    这样的东西应该可以工作(文件顺序非常重要,它将第一个文件的第一行与第二个文件的第一行进行比较):

    awk '
    NR==FNR {
        a[NR]=$0
        next
    }
    {
        delete ary
        delete ary2
        x=y=len=i=k=0
        x=split($0,ary,""); 
        y=split(a[FNR],ary2,"");
        len=x>y?x:y;
        while(len>0) {
            if (ary[++i]==ary2[++k]) {
                printf ary[i]
            }
            else
            {
                printf "-"
                i--
            }
            len--
        }
        print ""
    }' file1 file2
    

    测试:

    $ cat file1
    aaabaaa
    abcdefabc
    aaabbbccc
    
    $ cat file2
    aaaaaa
    abcabc
    acacacac
    

    输出:

    aaa-aaa
    abc---abc
    a-----c--
    

    【讨论】:

    • 嗨,请问文件 1 中是否有多余的行,它仍然可以检查差异在哪里吗?像所有的例子一样---在额外的行中。
    • 正如我提到的,文件顺序非常重要。如果第二个文件中存在额外的行,那么是的,上述解决方案将起作用。如果第一个文件中存在额外的行,那么我们将不得不添加额外的代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-13
    • 1970-01-01
    • 2019-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多