我想比较两个文件并获取新文件中每行更改后的列号的差异

我想比较两个文件并获取新文件中每行更改后的列号的差异

我想比较两个文件并获取新文件中每行更改的列号的差异。这两个文件具有相同的结构,具有排序的数据和相同的行数。

我有两个文件,

文件1

01|Akshaya|9657|Pune
02|Samiksha|8391|Mumbai

文件2

01|Akshaya|9657|Nashik
02|Samiksha|0202|Nagpur

我想比较这两个文件并打印记录差异的详细信息。就像第一行的列不匹配一样。因此,当我们比较上面两个文件时,第二个文件中的第一行与第一个文件中的第一行不同。所以输出如下。

文件3

Sr no|Col no
01|3
02|2,3

答案1

将每个文件的相同行号并排放置并比较各列:

$ paste -d"|" file_1 file_2 \
  | awk -v FS="|" 'BEGIN {print "Sr no|Col no"} \
    { printf $1"|"; \
      for(i=2;i<=4;i++) { \
       if($i!=$(i+4)) printf i-1","; \
      } \
      print "";
    }'

请注意,awk从 1 开始对列进行计数。您的示例看起来像是从 0 开始。这就是我在输出中减去 1 的原因。

,另请注意,每行都会有尾随。如有必要,您可以通过管道将其删除sed

| sed 's/,$//'

相关内容