比较两个文件并标记更改的字段。

comparison of two file & mark changed fields.

这是来自

的扩展问题

按照规定假设两个文件有一些不同

file 1

a||d||f||a
1||2||||4


file 2

a||d||f||a
1||1||3||4
1||2||r||f

所需输出的位置

1||1#2||3#||4
1||2||r||f

你可以看到我只想比较文件并相应地打印,例如如果文件 2 中找到的任何更新将打印为 updated_value#oldvalue 并且添加到文件 2 的任何新行也将相应地更新.

&我现在想按照@fedorqui的建议输出差异

awk 'BEGIN{FS=OFS="|"}
     FNR==NR {for (i=1;i<=NF;i+=2) a[FNR,i]=$i; next}
     {for (i=1; i<=NF; i+=2)
         if (a[FNR,i] && a[FNR,i]!=$i)
             $i=$i"#"a[FNR,i]
     }1' f1 f2

结果

1||1#2||3||4
1||2||r||f

这工作得很好,但它无法根据更改的要求处理空白行。谁能帮我?

这个命令

awk 'BEGIN{FS=OFS="|"}
     NR==FNR{for(i=1;i<=NF;i++)a[FNR" "i]=$i;b[FNR]=[=10=];next}
     {for(i=1;i<=NF;i++)(FNR" "i in a)&&a[FNR" "i]!=$i&&$i=$i"#"a[FNR" "i]}
     !(b[FNR]==[=10=])' file{1,2}

产生

1||1#2||3#||4
1||2||r||f

这是预期的输出。