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会丢失吗?
您需要在运行之前对文件进行排序join
以匹配它们.
它可以使用:
join <(sort temp) <(sort temp2)
Run Code Online (Sandbox Code Playgroud)
我的输出是:
2
6
8
Run Code Online (Sandbox Code Playgroud)