2016-06-07 42 views
-2

文件1找到共同的第一列和打印,如果他們匹配

3.5 22 
5. 23 
4.2 42 
4.5 44 

文件2

3.5 
3.7 
5. 
6.5 

第二個期望輸出:

3.5 22 
5. 23 

我更願意用 'AWK'。

+2

你應該真的展示你試過的東西,並解釋你卡在哪裏。 –

+0

對不起,我確實問了一個問題,這是我做的最少的努力。不過,我對這個網站非常熟悉。我值得評論。永遠不會再發生 – aQuestion

回答

2

oneliner應該做的伎倆

awk 'NR==FNR{a[$1];next}$1 in a' file2 file1 

說明

NR==FNR{a[$1];next}:存儲keys呈現file2

$1 in a:將打印行,如果從file1當前keya我們存儲的file2keys

docs

如果指的是沒有記錄的值數組元素,該值參考的 是「」,空...... 這樣的提法自動 創建該數組元素,其空值字符串的值爲

注意

由於@JonathanLeffler在評論$1 in a解釋來代替a[$1]避免a創建元素時,有不匹配。

注2

作爲@EdMorton指向a[$1]++廢物處理器週期。我們可以使用a[$1]初始化關聯陣列。

原始代碼

awk 'NR==FNR{a[$1]++;next}a[$1]' file2 file1 

感謝喬納森 & & 埃德

+1

如果沒有匹配,避免在'a'中創建元素,用'a'中的$ 1(而不是'a [$ 1]')可以更好嗎?對於小規模文件,沒有實質性差異。如果OTOH在'file2'中有幾百萬個值,'file1'中只有幾個值,那麼它可能很重要。 (再說一次,有了千兆字節的主內存,即使有數百萬個值,也不會有太大影響。) –

相關問題