基于常量文件从许多文件中提取内容

时间:2014-03-04 10:41:37

标签: bash awk

我有一个常量文件(File1)和50多个文件。我想将File1中的Chr与所有其他文件匹配,如果它是真的那么我想给条件开始> = Pos&&结束< Pos使用awk或bash脚本中的任何其他语言提取所有文件的内容。

这是一个例子。(为了简单起见,我这里只使用了两个文件)

File1(常量文件)

  

Satr End

     
    

1 86 99

         

5 1223 23455

         

6 56 100

  

File2

  

Chr Pos深度

     
    

1 87 0

         

1 88 1

         

1 89 1

         

1 90 1

         

1 92 2

         

1 93 3

         

2 23 1

         

2 24 1

  

输出

  

Chr Pos深度

     
    

1 87 0

         

1 88 1

         

1 89 1

         

1 90 1

         

1 92 2

         

1 93 3

  

请告诉我我该怎么办?

由于

1 个答案:

答案 0 :(得分:1)

awk 'NR==FNR{s[$1]=$2;e[$1]=$3;next}$1 in s && $2 >s[$1] && $2 <e[$1]' file1 file2

这个单行程适用于您的示例(跳过标题行,您可以添加NR(orFNR)>1)。你至少可以得到这个想法

输出:

kent$  awk 'NR==FNR{s[$1]=$2;e[$1]=$3;next}$1 in s && $2 >s[$1] && $2 <e[$1]' f f2 
1 87 0
1 88 1
1 89 1
1 90 1
1 92 2
1 93 3

说明:

Assume the columns were separated by whitespace.

NR==FNR{s[$1]=$2;e[$1]=$3;next}

here for the first file (your file1), save two arrays, s[] (start) and e[] (end). the index is first column value.



$1 in s && $2 >s[$1] && $2 <e[$1]

for the 2nd file (your file2), each row, we print it out if 3 conditions were satisfied:

1) $1 should be an index in s[] (or e[] same here)
2) $2 > s[$1]
3) $2 < e[$1]