2

我正在开发solaris unix。我有两个文件:

> cat temp
2
8
6
> cat temp2
1
2
3
4
5
6
7
8
9
> 

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

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

这非常有效。然后我还看到了使用 join 的方法,其中 说(以及手册页)“默认情况下,当我们没有明确指定字段编号时,join 命令匹配第一个字段上的文件”所以我认为如果我给join temp temp2我会得到

2
6
8

但这是我得到的!

> join temp temp2
2
8
>

如果默认连接匹配第一列,谁能告诉我为什么这里缺少 6?

4

2 回答 2

6

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

可以使用以下方法完成:

join <(sort temp) <(sort temp2)

我的输出是:

2
6
8
于 2013-01-03T07:10:12.180 回答
2

comm也是一个合适的工具,但它也需要排序的文件。

comm -12 <(sort temp) <(sort temp2)

将在 bash 或 ksh 中工作

于 2013-01-03T11:50:02.673 回答