查找常见的第一列,如果匹配则打印第二列

时间:2016-06-07 21:46:31

标签: awk

File1中

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'。

1 个答案:

答案 0 :(得分:2)

oneliner应该执行技巧

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

<强>解释

NR==FNR{a[$1];next}:将keys礼物存储在file2

$1 in a:如果key中的当前file1位于a我们存储keys file2的位置,则会打印该行。

来自docs

  

如果引用没有记录值的数组元素,则为该值   引用的是&#34;&#34;,null ... 这样的引用自动   创建该数组元素,使用空字符串作为其值

注意

正如@JonathanLeffler在评论中解释$1 in a代替a[$1],以避免在a无法匹配时创建元素。

注2

由于@EdMorton点a[$1]++会浪费处理器周期。我们只需使用a[$1]初始化 associative 数组。

原始代码

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

谢谢 Jonathan &amp;&amp;