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'。
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'。
這oneliner
應該做的伎倆:
awk 'NR==FNR{a[$1];next}$1 in a' file2 file1
說明
NR==FNR{a[$1];next}
:存儲keys
呈現file2
。
$1 in a
:將打印行,如果從file1
當前key
是a
我們存儲的file2
的keys
。
從docs:
如果指的是沒有記錄的值數組元素,該值參考的 是「」,空...... 這樣的提法自動 創建該數組元素,其空值字符串的值爲。
注意
由於@JonathanLeffler在評論$1 in a
解釋來代替a[$1]
避免a
創建元素時,有不匹配。
注2
作爲@EdMorton指向a[$1]++
廢物處理器週期。我們可以使用a[$1]
初始化關聯陣列。
原始代碼
awk 'NR==FNR{a[$1]++;next}a[$1]' file2 file1
感謝喬納森 & & 埃德。
如果沒有匹配,避免在'a'中創建元素,用'a'中的$ 1(而不是'a [$ 1]')可以更好嗎?對於小規模文件,沒有實質性差異。如果OTOH在'file2'中有幾百萬個值,'file1'中只有幾個值,那麼它可能很重要。 (再說一次,有了千兆字節的主內存,即使有數百萬個值,也不會有太大影響。) –
你應該真的展示你試過的東西,並解釋你卡在哪裏。 –
對不起,我確實問了一個問題,這是我做的最少的努力。不過,我對這個網站非常熟悉。我值得評論。永遠不會再發生 – aQuestion