匹配 2 个注释文件中的三列并将这些行打印到新的输出文件中

匹配 2 个注释文件中的三列并将这些行打印到新的输出文件中

我有 2 个文件,文件 1 和文件 2 具有相同的列号。第一列有染色体编号,第二列有启动子起始位点,第三列有启动子终止位点。

如果在文件 2 中找到文件 1 中所有三列的匹配项,我想匹配这两个文件。我想生成一个输出文件,显示精确的三列和第四列。第四个将显示得分为 1 的匹配和得分为 0 的不匹配。

文件一:

chr1 899 1098
chr3 677 900
chr3 844 1045

文件2:

chr3 844 1045
chr1 899 1098
chr4 500 789

输出文件:

chr1 899 1098  1
chr3 677 900   0
chr3 844 1045  1
chr4 500 789   0

我找到了匹配文件的答案并在同一论坛输出一个新文件:

awk 'FNR==NR{a[$1,$2,$3]=$0;next}{if(b=a[$1,$2,$3]){print b}}' file1 file2

但我也想在输出文件中包含匹配和不匹配分数列。

答案1

脚本

#!/bin/bash
filea=$1
fileb=$2
fout=$3
sed -i "/^$/d" $filea $fileb
cat $filea | while read a b c
  do
    grep "$a.*$b.*$c" $fileb &>/dev/null && l="$a   $b  $c  1" || l="$a $b  $c  0"
    grep "$l" $fout &>/dev/null || echo "$l" >> $fout
  done
cat $fileb | while read a b c
  do
    grep "$a.*$b.*$c" $filea $fout &>/dev/null && l="$a $b  $c  1" || l="$a $b  $c  0"
    grep "$l" $fout &>/dev/null || echo "$l" >> $fout
  done

标准输出

younes@cbfcdf:~$ cat filea
chr1 899 1098
chr3 677 900
chr3 844 1045
younes@cbfcdf:~$ cat fileb
chr3 844 1045
chr1 899 1098
chr4 500 789
younes@cbfcdf:~$ ./script filea fileb new_file
younes@cbfcdf:~$ cat new_file 
chr1    899     1098    1
chr3    677     900     0
chr3    844     1045    1
chr4    500     789     0
younes@cbfcdf:~$

相关内容