比较两个文件并标记更改的字段。
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
这是预期的输出。
这是来自
按照规定假设两个文件有一些不同
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
这是预期的输出。