2016-06-07 52 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'中只有几个值,那么它可能很重要。 (再说一次,有了千兆字节的主内存,即使有数百万个值,也不会有太大影响。) –

相关问题