使用join比较unix中的两个文件

use*_*168 2 unix shell awk join

我正在研究solaris unix.我有两个文件:

> cat temp
2
8
6
> cat temp2
1
2
3
4
5
6
7
8
9
> 
Run Code Online (Sandbox Code Playgroud)

现在我需要temp2中存在的temp2中的所有行:我遇到了这个并尝试了下面的命令.

> nawk 'FNR==NR{a[$0];next}($1 in a)' temp temp2
2
6
8
>
Run Code Online (Sandbox Code Playgroud)

这完美地运作了.然后我也看到了在这里使用join的方式, 其中的内容(以及手册页)"默认情况下,当我们没有明确指定字段编号时,join命令匹配第一个字段上的文件"所以我认为如果我给join temp temp2我,我会得到

2
6
8
Run Code Online (Sandbox Code Playgroud)

但是我得到了!

> join temp temp2
2
8
>
Run Code Online (Sandbox Code Playgroud)

如果默认加入匹配第一列,有人可以告诉我为什么6会丢失吗?

aru*_*aku 6

您需要在运行之前对文件进行排序join以匹配它们.

它可以使用:

join <(sort temp) <(sort temp2)
Run Code Online (Sandbox Code Playgroud)

我的输出是:

2
6
8
Run Code Online (Sandbox Code Playgroud)