2つのファイルがありますが、ファイル1とファイル2の列番号は同じです。最初の列には染色体番号があり、2番目の列にはプロモーター開始部位があり、3番目の列にはプロモーター停止部位があります。
ファイル1の3つの列すべてについて、ファイル2で一致するものが見つかった場合は、両方のファイルを一致させたいと思います。正確に3つと4つの列を表示する出力ファイルを生成したいと思います。 4番目には、スコアが1の一致とスコアが0の不一致が表示されます。
ファイル1:
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:~$