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

时间:2013-01-03 07:03:16

标签: shell unix join awk

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

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

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

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

这完美无缺。 然后我也看到了使用join here的方法 其中的内容(以及手册页)“默认情况下,当我们没有明确指定字段编号时,join命令与第一个字段上的文件匹配” 所以我想如果我给join temp temp2我会得到

2
6
8

但是我得到了!

> join temp temp2
2
8
>

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

2 个答案:

答案 0 :(得分:6)

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

可以使用:

完成
join <(sort temp) <(sort temp2)

我的输出是:

2
6
8

答案 1 :(得分:2)

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

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

将在bash或ksh中运行