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