これは最初の入力です。これには20,000個の文字列が含まれています。
X 10063445 10098579 X:10063445|10098579
X 101020487 101021315 X:101020487|101021315
X 101041317 101042312 X:101041317|101042312
X 101120402 101120784 X:101120402|101120784
X 101126709 101148161 X:101126709|101148161
X 107088436 107088839 X:107088436|107088839
X 110020352 110067396 X:110020352|110067396
2番目の入力ファイル -
X 10063445 10098579 2
X 11055936 11110981 2
X 13666317 13680598 5
X 14843660 14859334 13
X 14850505 14859334 5
X 16818574 16829770 2
X 19541925 19546050 4
X 19683823 19695741 4
X 19965044 19970298 2
X 20188497 20204103 2
X 24073601 24074959 11
X 24172715 24179770 9
X 24179183 24179770 2
X 24540246 24546477 2
X 24809898 24843677 4
X 24809898 24888122 3
X 38666121 38687674 2
X 44524002 44527365 8
X 45010961 45020730 3
X 45010961 45037689 2
X 46984884 46998277 2
X 47222261 47228644 2
これまで、2つのファイルを交差させるためにbedtools intersectを使用していますが、交差した結果のみを提供し、同じ結果ファイルからも分離したいと思います。私は次のコマンドを使用します。
bedtools intersect -wa -wb -a input1 -b input2 -f 1 -r >intersect.bed
それで、同じintersect.bedファイルに交差して分離された結果を含める方法はありますか?結果が欲しい
X 10063445 10098579 X:10063445|10098579 X 10063445 10098579 2
X 101020487 101021315 X:101020487|101021315
X 101041317 101042312 X:101041317|101042312 X 101041317 101042312 3
X 101120402 101120784 X:101120402|101120784
X 101126709 101148161 X:101126709|101148161 X 101126709 101148161 4
X 107088436 107088839 X:107088436|107088839 X 107088436 107088839 4
X 110020352 110067396 X:110020352|110067396
X 110020352 110109146 X:110020352|110109146 X 110020352 110109146 3
X 110067347 110109146 X:110067347|110109146 X 110067347 110109146 4
X 11055936 11110981 X:11055936|11110981
そのため、ここでは交差点と分離点を含むこのような出力を期待します。ありがとう
答え1
私はそれがawkから成ることができると確信しています。とにかく私は質問が好きです。これは最も効率的なソリューションではありません。
file1='file1'
file2='file2'
file_new='new_file'
file_not_matched='not_matched'
delimiter='\t' #when joining strings in the new file
true > $file_new
true > $file_not_matched
IFS=$'\n'
#walk file1
for line1 in `cat $file1`; do
line1_match=`echo $line1 | awk '{print $2 FS $3}'`
echo -n "$line1" >> new_file
#walk file2
for line2 in `cat $file2`; do
line2_match=`echo $line2 | awk '{print $2 FS $3}'`
#test lines
if [ "$line1_match" == "$line2_match" ];
then
echo -e "$delimiter$line2" >> new_file
continue 2
fi
done
echo "" >> new_file
echo $line1 >> not_matched
done