Chinaunix

标题: 如何判断A文件数值是否在B文件的数值区间之中 [打印本页]

作者: chenjiali1    时间: 2013-10-15 13:51
标题: 如何判断A文件数值是否在B文件的数值区间之中
大家好,我有两个文件,分别如下:
A文件:
chr1    2      
chr1    72      
chr3    42      
chr4    12  
     
B文件
chr1    1        2
chr1    72        275
chr3    25        50
chr4    6        10
如果A文件中的第二列处于B文件的某行的2,3列数字之间(当然第一列要是一致的),把这些行合并输出,结果如下
chr1    2      chr1    1        2
chr1    72    chr1    72        275
chr3    42    chr3    25        50

请问用awk如何实现,我自己写的老是提示语法错误,谢谢大家。
作者: Shell_HAT    时间: 2013-10-15 13:55
把你写的贴出来看看
作者: yestreenstars    时间: 2013-10-15 13:58
本帖最后由 yestreenstars 于 2013-10-15 14:17 编辑

如果两个文件是对应的话:
  1. [root@localhost ~]# awk 'NR==FNR{a[NR]=$2;b[NR]=$0;next}a[FNR]>=$2&&a[FNR]<=$3{print b[FNR]"\t"$0}' a b
  2. chr1    2       chr1    1        2
  3. chr1    72      chr1    72        275
  4. chr3    42      chr3    25        50
  5. [root@localhost ~]#
复制代码

作者: 关阴月飞    时间: 2013-10-15 14:10
回复 1# chenjiali1
  1. awk 'FNR==NR{a[$1]++;b[$1,a[$1]]=$2;next}{for(i=1;i<=a[$1];i++)if(b[$1,i]>=$2 && b[$1,i]<=$3)print $1,b[$1,i],$0}' a b
复制代码

作者: li0924    时间: 2013-10-15 14:13
  1. awk 'NR==FNR{a[$1,FNR]=$0;b[$1,FNR]=$2;next}{if(a[$1,FNR]){if(b[$1,FNR]>=$2 && b[$1,FNR]<=$3)print a[$1,FNR],$0}}' A B
复制代码

作者: WilliBhamlll    时间: 2013-10-15 14:31
  1. awk 'NR==FNR{a[++i]=$2;next}a[FNR]>=$2&&a[FNR]<=$3{print $1"\t"a[FNR]"\t"$0}' a b
复制代码

作者: chenjiali1    时间: 2013-10-15 14:42
非常感谢大家
作者: elu_ligao    时间: 2013-10-15 15:03
awk 'NR==FNR{a[++i]=$1; b[++j]=$2; next}a[FNR]==$1&&b[FNR]>=$2&&b[FNR]<=$3{print a[FNR]"\t"b[FNR]"\t"$0}' A B
作者: LikeLx    时间: 2013-10-15 15:58
回复 4# 关阴月飞
又学习了一种思路

   
作者: expert1    时间: 2013-10-15 16:50
回复 1# chenjiali1


    http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=1800295

论坛上问了无数次的月经问题,只要你关注论坛。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2