shell-script – 比较两个文件并写入不匹配的行以及不匹配的列.指出不匹配的列是我的主要问题陈述

我有一个要求,我需要将两个文件与每个列进行比较,并在另一个文件中写入相应的差异以及显示不匹配列的一些标识.指出不匹配的列是我的主要问题陈述.例如,我们有以下文件:

File 1

1|piyush|bangalore|dev
1|piyush|bangalore|QA
2|pankaj|bangalore|dev
3|rohit|delhi|QA

File 2

1|piyush|bangalore|QA
1|piyush|bangalore|QA
2|pankaj|bangalore|dev
3|rohit|bangalore|dev

预期的输出文件看起来有点像.

File 1
1|piyush|bangalore|**dev**
File 2 
1|piyush|bangalore|**QA**
File 1
3|rohit|**delhi**|**QA**
File 2
3|rohit|**bangalore**|**dev**

我想实现这样的东西,我可以看到不匹配的列以及不匹配的行.我试过了

diff File1 File2> Diff_File

但这只给了我不匹配的记录或行.我也没有任何方法指出不匹配的列.请帮助我,如果它可能做的是使用shell脚本或awk命令,因为我对此非常新.提前致谢.

最佳答案
Python 3.x解决方案:

diff_marked.py脚本:

import sys

file1_name = sys.argv[1]
file2_name = sys.argv[2]

with open(file1_name, 'r') as f1, open(file2_name, 'r') as f2:
    f1_lines = f1.readlines()  # list of lines of File1
    f2_lines = f2.readlines()  # list of lines of File2

    for k,l in enumerate(f1_lines):
        f1_fields = l.strip().split('|')  # splitting a line into fields by separator '|'
        if k < len(f2_lines) and f2_lines[k]:
            has_diff = False
            f2_fields = f2_lines[k].strip().split('|')
            for i,f in enumerate(f1_fields):
                if f != f2_fields[i]:    # comparing respective lines 'field-by-field' between two files
                    f1_fields[i] = '**' + f + '**'  # wrapping differing fields
                    f2_fields[i] = '**' + f2_fields[i] + '**'
                    has_diff = True

        if has_diff:
            print(f1.name)  # print file name
            print('|'.join(f1_fields))
            print(f2.name)
            print('|'.join(f2_fields))

用法:(你可能有另一个python版本,目前的情况已在python 3.5上测试过)

python3.5 diff_marked.py File1 File2 > diff_output

diff_output内容:

File1
1|piyush|bangalore|**dev**
File2
1|piyush|bangalore|**QA**
File1
3|rohit|**delhi**|**QA**
File2
3|rohit|**bangalore**|**dev**

转载注明原文:shell-script – 比较两个文件并写入不匹配的行以及不匹配的列.指出不匹配的列是我的主要问题陈述 - 代码日志