如何使用参考列表从文件中有选择地检索特定行和附近行?

时间:2019-04-09 08:22:38

标签: awk grep

我有两个表数组,这是文件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

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

1 个答案:

答案 0 :(得分:0)

此awk单行代码可完成这项工作:

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

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

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

P.S。 您也用grep标记了问题,但是grep并不是正确的工具。