我有一个用例,我需要将两个文件与每个列进行比较,并在另一个文件中写下相应的差异以及显示不匹配列的一些标识。例如:
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脚本的问题。提前谢谢。
答案 0 :(得分:0)
以下内容应该让你进入球场:
paste -d"|" file1 file2 | awk -F"|" '{for(i=1;i<=(NF/2);++i){if($i!=$(i+(NF/2))){print "row "NR", column"i" mismatched"}}}'
我们正在使用paste
将两个文件一行一行地连接在一起,并在粘贴的行之间粘贴一个管道。
然后我们把它传递给awk哪个
-F"|"
for(i=1;i<=(NF/2);++i)
(NF/2)
测试该字段(来自第二个文件)if($i!=$(i+(NF/2)))
{print "row "NR", column"i" mismatched"}
您可以添加到最后一位以包含不匹配的值:
{print "row "NR", column"i" mismatched. Value1: "$i", Value2: "$(i+(NF/2))}
或者你有什么。
答案 1 :(得分:0)
我不确定这是否是正确的做法。但截至目前我正在使用dwdiff
linux实用程序来实现我的要求,即我得到不匹配的列。以下是可能对某人有用的输出。
1|piyush|bangalore|dev
1|piyush|bangalore|QA
2|pankaj|bangalore|dev
3|rohit|delhi|QA
1|piyush|bangalore|QA
1|piyush|bangalore|QA
2|pankaj|bangalore|dev
3|rohit|bangalore|dev
解决方案。
$ dwdiff -d '|' data1 data2
<强>输出强>
1|piyush|bangalore|[-dev-]{+QA+}
1|piyush|bangalore|QA
2|pankaj|bangalore|dev
3|rohit|[-delhi-]{+bangalore+}|[-QA-]{+dev+}