Bash:找出哪些行在两个文件之间没有改变

我有两个文件,每个文件都包含一个计数列表,其中每行是特定进程的计数,例如

文件1:

10 13 12 7 15 

文件2:

 13 13 15 21 15 

我希望做diff的逆,也就是说,找出两个文件之间哪些行没有改变。 理想情况下,输出将是行号,以识别停滞的进程file_out:

 2 5 

关于潜在的重复:“逆向差异”问题实际上是寻找相同的行,而不pipe它们在文件中的位置如何(尽pipe文件必须分类)。 我要求直接比较每个文件中的同一行。

你可以使用这个awk命令:

 awk 'FNR==NR{a[FNR]=$0; next} a[FNR] == $0{print FNR}' file1 file2 2 5 

awk命令的解体:

 NR == FNR { # While processing the first file a[FNR] = $0 # store the line by the line # next # move to next record } # while processing the second file a[FNR] == $0 # current record is same as array value # with index of current line # print FNR # print record number 
 $ paste file1 file2 | awk '$1==$2{print NR}' 2 5 

怎么运行的

第一步使用将行合并在一起的paste

 $ paste file1 file2 10 13 13 13 12 15 7 21 15 15 

第二步是awk,检查两列是否相等, $1==$2 。 如果是,则打印行(记录)号NR