我有 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:~$