이것은 첫 번째 입력입니다. 여기에는 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
두 번째 입력 파일 -
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
지금까지 두 파일을 교차하기 위해 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