我有两个表数组,这是文件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
关于如何实现它的任何建议?非常感谢!
答案 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并不是正确的工具。