Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
awk按标识符比较两个文件(&;以特定格式输出_Awk_Pattern Matching_Gawk - Fatal编程技术网

awk按标识符比较两个文件(&;以特定格式输出

awk按标识符比较两个文件(&;以特定格式输出,awk,pattern-matching,gawk,Awk,Pattern Matching,Gawk,我有两个大文件,我需要比较所有管道分隔 文件1 a||d||f||a 1||2||3||4 文件2 a||d||f||a 1||1||3||4 1||2||r||f 现在我想比较文件并相应地打印,例如,如果在文件2中找到的任何更新都将打印为updated\u value\oldvalue&添加到文件2中的任何新行也将相应地更新 因此,所需的输出是:(仅更新和新数据) 到目前为止,我尝试的是获得单独的更改值: awk -F '[||]+' 'NR==FNR{for(i=1;i<=NF;i

我有两个大文件,我需要比较所有管道分隔

文件1

a||d||f||a
1||2||3||4
文件2

a||d||f||a
1||1||3||4
1||2||r||f
现在我想比较文件并相应地打印,例如,如果在文件2中找到的任何更新都将打印为
updated\u value\oldvalue
&添加到文件2中的任何新行也将相应地更新

因此,所需的输出是:(仅更新和新数据)

到目前为止,我尝试的是获得单独的更改值:

awk -F '[||]+' 'NR==FNR{for(i=1;i<=NF;i++)a[NR,i]=$i;next}{for(i=1;i<=NF;i++)if(a[FNR,i]!=$i)print $i"#"a[FNR,i]}' file1 file2 >output
awk-F'[| |]+''NR==FNR{for(i=1;i我想说:

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上的行1,等等。是的,你能帮我怎么做吗…这是什么行为?我回答你的问题,你接受它,然后就不接受任何形式的回答解释。如果你有一个新问题,问一个新问题。如果你的要求不一致,请说明并提供一些反馈。
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
$ 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
a||d||f||b#a
1||1#2||3||4
1||2||r||f