如何使用引用列表从文件中有选择地检索特定和附近的行? [关闭]

问题描述 投票:-2回答:1

我有两个表数组,这里是文件A:

k1 A 1
k1 A 2
k1 B 1
k1 B 2
k1 B 3
k1 B 4
k1 B 5
k1 B 6
k1 B 7
k1 B 8
k1 B 9
k1 V 1
k1 V 2
k1 V 3
k1 V 4
k1 V 5
k1 V 6
k1 S 1
k1 S 2

和第一个数组的子集(比如文件B):

k1 A 2
k1 B 5
k1 V 2
k1 S 1

我想从文件A中选择性地保留文件B中的行,并根据第3列中的值提取附近的行+/- 3。

我的预期输出是:

k1 A 1
k1 A 2
k1 B 2
k1 B 3
k1 B 4
k1 B 5
k1 B 6
k1 B 7
k1 B 8
k1 V 1
k1 V 2
k1 V 3
k1 V 4
k1 V 5
k1 S 1
k1 S 2

有关如何实现的任何建议?非常感谢!

awk grep
1个回答
0
投票

这个awk one-liner完成了这项工作:

awk '{k=$1 FS $2}
    NR==FNR{a[k]=$3;next}a[k]>=$3-3 && a[k]<=$3+3' B A

对于给定的输入示例(A和B),它将为您提供预期的输出。

逻辑也很简单,如果你知道awk语法,你应该理解它。代码解释了自己。

附:你也用grep标记了这个问题,但是grep不是正确的工具。

© www.soinside.com 2019 - 2024. All rights reserved.