2013-01-03 45 views
2

我正在使用solaris unix。 我有兩個文件:使用連接比較unix中的兩個文件

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

現在我需要所有TEMP2這是目前在臨時線路: 我碰到this並試圖下面的命令。

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

這個工作完美。 然後,我還看到了使用連接的方式here 其中在其中說(還有手冊頁),「默認情況下,連接命令匹配第一個字段上的文件時,我們沒有明確指定字段號」 所以我以爲如果我給join temp temp2我會得到

2 
6 
8 

但這裏是我得到了!

> join temp temp2 
2 
8 
> 

有人可以告訴我爲什麼6在這裏如果默認加入匹配第一列嗎?

+0

您正在使用什麼殼呢? –

+0

'fgrep -xf temp temp2' – tripleee

回答

6

爲了與它們匹配,您需要在運行join之前對文件進行排序。

這是可以做到用:

join <(sort temp) <(sort temp2) 

而且我的輸出是:

2 
6 
8 
+0

那麼我越來越錯誤:'>加入<(分類溫度)<(排序溫度2) 重定向的名稱缺少.'。是否有任何其他方式來做到這一點? – user1939168

+0

那是因爲你在使用solaris。您應該先對文件進行排序。即:'sort temp> temp_sorted'; 'sort temp2> temp2_sorted'; '加入temp_sorted temp2_sorted'; – arutaku

+1

'<(...)'結構被稱爲'過程替換';它在bash中可用,但它不是可移植的。如果你在solaris下運行bash shell,它應該可以工作。 –

2

comm也有適當的工具,但它也需要排序的文件。

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

將在bash工作或ksh