我想比较两个文件并获取新文件中每行更改的列号的差异。这两个文件具有相同的结构,具有排序的数据和相同的行数。
我有两个文件,
文件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/,$//'