当文件的第二列与另一个文件中的值匹配时如何从文件中提取行
How to extract lines from a file when the second columns of a file matches the values in another file
我有两个文件。
文件 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 中的值匹配,我想从文件 2 中提取值。
所以预期的输出将是:
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[[=10=]]++};FNR!=NR{if( 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:
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 中的值匹配,我想从文件 2 中提取值。
所以预期的输出将是:
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[[=10=]]++};FNR!=NR{if( 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[]++
- 当我们到达第二个文件时,我们只检查第二个文件的第二列 (
) 中的值是否在数组中;如果是,我们打印它们。