Bash:查找两个文件之间未更改的行

3
我有两个文件,每个文件都包含一个计数列表,其中每一行是特定进程的计数,例如:
文件1:
10
13
12
7
15

文件2:
13
13
15
21
15

我希望做diff的反向操作,也就是找出在两个文件之间没有发生变化的行。理想的情况下,输出应该包含行号,以识别停滞的进程,例如file_out:
2
5

关于潜在的重复问题:'inverse diff' 问题实际上是寻找相同的行,而不考虑它们在文件中的位置(尽管您需要进行文件排序)。我正在要求直接比较每个文件中相同的行。

可能是重复的问题:如何显示共同行(反向diff)? - kenorb
1
@kenorb,你说得对,措辞相似。然而,在这个问题中,原始文件的行号很重要。这与链接的问题不同,因此这里的答案也相应不同。 - John1024
2个回答

2
$ 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

1
您可以使用以下awk命令进行操作:

您可以使用以下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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接