在 BASH 中逐行比较两个文件

Bet*_*yte 3 string bash comparison awk grep

我需要制作一个脚本文件来读取两个文件并打印出它们之间的公共行。我知道这两个文件的行数相同,并且每一行只包含一个单词。

文件一:

Blue
Red
Orange
Green
Yellow
Blue
Run Code Online (Sandbox Code Playgroud)

文件2:

Blue
Green
Red
Purple
Yellow
Blue
Run Code Online (Sandbox Code Playgroud)

预期输出:

Blue
Yellow
Blue
Run Code Online (Sandbox Code Playgroud)

因此,在示例中,红色和绿色出现在两个文件中,但是它们不在每个文件中的同一行,因此它们被忽略。

尝试过使用 awk、grep 和 comm,但无法让它们工作。

尝试找到处理时间最短的解决方案。

Sto*_*ica 5

使用 awk:

awk 'NR == FNR { lines[NR] = $0 } NR != FNR && lines[FNR] == $0 { print }' file1 file2
Run Code Online (Sandbox Code Playgroud)

解释:

  • 读取第一个文件(NR == FNR)时,构建行号到值的映射
  • 当读取的不是第一个文件 ( NR != FNR) 时,如果当前行与缓存中对应行的内容匹配,则打印该行

这会读取两个文件一次,并使用与第一个文件大小大致相同的内存。