linux - 当文件的第二列与另一个文件中的值匹配时如何从文件中提取行
问题描述
我有两个文件。
文件 1:
4
14
18
45
53
60
64
102
106
158
162
文件2:
28 1 2
54 1 2
90 1 1
103 1 1
155 1 17
191 1 1
235 1 1
245 4 1
275 4 1
362 4 1
377 18 1
391 18 1
413 18 2
466 18 2
492 18 2
494 18 41
498 45 1
522 45 1
529 57 3
542 53 1
560 58 6
562 164 25
568 164 5
如果文件 2 的第二列与文件 1 中的值匹配,我想从 file2 中提取值。
所以预期的输出将是:
245 4 1
275 4 1
362 4 1
377 18 1
391 18 1
413 18 2
466 18 2
492 18 2
494 18 41
498 45 1
522 45 1
542 53 1
我在网上看到很多解决方案是使用 python 或 Perl,但是,我想使用 linux 命令来执行此操作,有什么想法吗?
解决方案
这应该做吗?
awk 'FNR==NR{a[$0]++};FNR!=NR{if($2 in a){print}}' file1 file2
245 4 1
275 4 1
362 4 1
377 18 1
391 18 1
413 18 2
466 18 2
492 18 2
494 18 41
498 45 1
522 45 1
542 53 1
解释:
- 我们将两个文件都交给 awk(在这种情况下,顺序很重要!)。
- 只要我们读取第一个文件 (
FNR==NR
) 我们将每个值存储在一个数组中a[$1]++
- 当我们到达第二个文件时,我们只检查来自第二个文件的第二列 (
$2
) 的值是否在数组中;如果是,我们打印它们。
推荐阅读
- python - Pandas(合并/合并/连接)多个表,同时将结果放在一行中
- c# - 如何使用自适应卡中的数据?
- java - 如何在 netbeans 中将 jpanel 声明为变量,以便可以使用它来拖动表单?[java摇摆]
- javascript - 无法让 minimax 函数适用于井字游戏
- python - 将第一个文件的内容复制到第二个文件,但在新行中显示每个数字
- spring-boot - 具有最高优先级的 PropertySourcesPlaceholderConfigurer
- amazon-web-services - Entity Framework Core 5 中查询执行的间歇性延迟
- pandas - 在其他列中计算具有多个条件的 NaN 单列
- android - 检查权限总是返回被拒绝
- r - 将数据框中的多列除以相邻列